Patent Publication Number: US-2022215622-A1

Title: Automated three-dimensional building model estimation

Description:
CROSS-REFERENCE TO RELATED APPLICATION 
     This application is a continuation-in-part of U.S. patent application Ser. No. 17/187,685, filed Feb. 26, 2021, for “Automated Three-Dimensional Building Model Estimation,” which claims priority to U.S. Provisional Patent Application No. 62/983,509, filed Feb. 28, 2020. The disclosures of the prior applications are considered part of and are incorporated by reference in the disclosure of this application. 
    
    
     TECHNICAL FIELD 
     This disclosure relates generally to estimating three-dimensional (3D) building structures, such as roof tops. 
     BACKGROUND 
     According to the International Energy Agency solar is the world&#39;s fastest growing source of power. Solar energy works by capturing the sun&#39;s energy and turning it into electricity for use in a home or business. The sun&#39;s energy is captured using solar panels, which are often installed in areas where they can receive maximum exposure to sunlight, such as roofs. A solar panel is comprised of multiple solar cells made of silicon with positive and negative layers which create an electric field. When photons from the sun impact a solar cell, electrons are released from their atoms. By attaching conductors to the positive and negative sides of a solar cell an electrical circuit is formed. When electrons flow through the circuit direct current (DC) is generated, which is converted to alternating current (AC) by an inverter to provide power to the home or office. Excess power is stored in a battery. 
     The number of solar panels needed for a solar energy system depends on how much energy the building uses, the usable surface area of the roof, the climate and peak sunlight at the location of the building and the wattage and relative efficiency of the solar panels. Multiple solar panels (modules) can be wired together to form a solar array. The peak sunlight hours for the building location impacts the amount of energy the solar array will produce. Also, the size and shape of the roof will impact the solar panel size and number of solar panels used in the solar array. The most popular solar panels are photovoltaic (PV) solar panels that are manufactured in standard sizes of about 65 inches by 39 inches with some variation among manufacturers. The size and shape of the roof will directly impact the size and number of solar panels to be installed. With a large usable roof area, larger panels can be installed at a lower cost per panel. If, however, the usable roof area is limited, or is partially shaded, fewer smaller high efficiency panels may be installed at a higher cost per panel. 
     There are many different roof types that make solar energy system design complex, including but not limited to: Gable, Hip, Masard, Gambrel, Flat, Skillion, Jerkinhead, Butterfly, Bonnet, Saltbox, Sawtooth, Curved, Pyramid, Dome and any combination of the foregoing. Also, any structures installed on the roof, such as heating, air conditioning and ventilation (HVAC) equipment, chimneys, air vents and the like reduces the usable surface area for solar panel installation. 
     There are existing software solutions for optimizing solar panel installation that use aerial imagery to estimate the usable surface area of a roof. These techniques, however, will often require substantial user input, making the design process tedious for the user. What is needed is an automated process that requires minimal user input to estimate 3D building structures, and in particular determining with high accuracy the usable area of a 3D roof top model for purposes of designing and simulating a virtual solar energy system that can output performance data that can be used to design an actual solar energy system that achieves the user&#39;s target energy savings goal and other user goals. 
     SUMMARY 
     Disclosed is an automated three-dimensional (3D) building model estimation system and method that predicts roof outlines, pitches and heights from imagery and 3D data is disclosed. 
     In an embodiment, a method comprises: obtaining, using one or more processors, an aerial image of a building based on an input address; obtaining, using the one or more processors, three-dimensional (3D) data containing the building based on the input address; pre-processing, using the one or more processors, the aerial image and 3D data; reconstructing, using the one or more processors, a 3D building model from the pre-processed image and 3D data, the reconstructing including: predicting, using a first machine learning model, an outline for each roof component; predicting, using a second machine learning model, a pitch and height of each roof component based on the predicted outline; and rendering, using the one or more processors, the 3D building model based on the predicted outline, at least one pitch and height of each roof component. 
     In an embodiment, predicting, using the first machine learning model, the outline for each roof component, further comprises: predicting, for each roof top component in a sequence of roof top components, a location of each perimeter edge of the roof top component; and predicting, for each roof top component, a location of each fold in the roof top component. 
     In an embodiment, the locations are predicted by a neural network, which outputs a probability distribution over potential locations. 
     In an embodiment, the probability distribution is used to guide a search process that estimates how good each prediction will be. 
     In an embodiment, the search process explores a specified number of forward steps and compares a roof representation that result from each possible next node or fold to outputs of an instance segmentation network. 
     In an embodiment, the outputs of the instance segmentation network are treated as a close approximation to the actual two-dimensional (2D) structure of the roof top. 
     In an embodiment, results of the search are used to update the probability distribution for predicting the location of the next node or fold. 
     In an embodiment, the search is a Monte Carlo Tree Search (MCTS). 
     In an embodiment, the first and second machine learning models are parts of a single neural network. 
     In an embodiment, pre-processing the aerial image and 3D data, further comprises: generating a 3D mesh from the 3D data; generating a digital surface model (DSM) of the building using the 3D mesh; aligning the image and DSM; generating a building mask from the image; using the 3D data with the building mask to calculate an orientation of each roof face of the building; snapping the orientation of the building to a grid; using the building mask to obtain an extent of the building; and cropping the image so that the building is centered in the image and axis-aligned to the grid. 
     In an embodiment, the method further comprises: predicting, using instance segmentation, a mask for each roof component of the building; predicting, using a first machine learning model with the mask as input, an outline for each roof component; and predicting, using a second machine learning mode with the mask and outline as input, a pitch and height of each roof component. 
     Other embodiments include but are not limited a system and computer-readable storage medium. 
     Particular embodiments disclosed herein provide one or more of the following advantages. An automated solar energy system design tool uses aerial imagery, 3D point clouds (e.g., LiDAR point clouds), machine learning (e.g., neural networks) and shading algorithms to estimate the size and shape of a roof of a building and to determine the optimum location of the solar panels to maximize exposure to the sun. The disclosed embodiments are entirely automated and require minimal user input, such as the user&#39;s home address, utility rates and the user&#39;s average monthly energy bill. The output is an estimated 3D building model that is input into an automated design tool that generates a virtual solar energy system design based on the estimated 3D building model. 
     The virtual solar energy system is automatically simulated to determine its performance including, for example, computing financials for solar production and estimating output power. The automated solar energy system design tool can be accessed by consumers or expert solar panel installers through, for example, the World Wide Web or through an application programming interface (API). 
     The details of the disclosed embodiments are set forth in the accompanying drawings and the description below. Other features, objects and advantages are apparent from the description, drawings and claims. 
    
    
     
       DESCRIPTION OF DRAWINGS 
         FIG. 1  illustrates a graphical user interface (GUI) of an automated solar energy system design tool, according to an embodiment. 
         FIG. 2  is a flow diagram of an automated process for estimating 3D building models, according to an embodiment. 
         FIG. 3  is an example input image for a preprocessing pipeline, according to an embodiment. 
         FIG. 4  is an example input 3D data for the preprocessing pipeline, according to an embodiment. 
         FIGS. 5A and 5B  illustrate an example preprocessing output where the image and a DSM derived from 3D data are axis-aligned to a grid, cropped around the building and aligned with each other, according to an embodiment. 
         FIG. 6  is a flow diagram of the preprocessing pipeline, according to an embodiment. 
         FIG. 7  illustrates results of a “spike free” triangulation algorithm applied to the 3D data to generate a 3D mesh, according to an embodiment. 
         FIGS. 8A and 8B  illustrate a registration process whereby the DSM and image are aligned, according to an embodiment. 
         FIGS. 9A-9C  illustrate using semantic segmentation techniques separately on the image and the DSM to predict building structures, trees and background, and then use cross-correlation to calculate the location at which the image and DSM align, according to an embodiment. 
         FIGS. 10A and 10B  illustrate generating a building mask from an image, according to an embodiment. 
         FIGS. 11A and 11B  illustrate use of the building mask to obtain an extent of the building and crop the image so that the building is centered in the image and axis-aligned to a grid, according to an embodiment. 
         FIG. 12  is a flow diagram of a reconstruction process to produce a 3D building model from the preprocessed image and DSM, according to an embodiment. 
         FIG. 13  illustrates output masks generated by a neural network for each roof plane using instance segmentation techniques, according to an embodiment. 
         FIG. 14  illustrates using heuristics and polygon fitting to convert the roof planes into polygons, and then use the DSM to project the two-dimensional (2D) polygons into 3D polygons, according to an embodiment. 
         FIGS. 15A and 15B  illustrate a nonparametric retrieval technique to find a matching roof type template in a database and then overlay the template on the image, according an embodiment. 
         FIGS. 16A-16C  illustrate using a neural network to predict an offset for every node in the roof to adjust the internal structure of the roof template to match the image, according to an embodiment. 
         FIG. 17  illustrates the output of a neural network for predicting edge types for all the edges of the 3D polygons, according to an embodiment. 
         FIG. 18  illustrates an alternative technique for using a neural network for wall detection to be used in an alternative polygon fitting algorithm, according to an embodiment. 
         FIG. 19  illustrates the alternative polygon fitting algorithm where the detected walls and roof planes are combined and all possible intersections between them are determined, according to an embodiment. 
         FIG. 20  illustrates a synthetic LiDAR technique wherein a neural network is used to compute a height map from a 2D image and then uses the height map to convert the 2D image into a rough 3D model of the building, according to an embodiment. 
         FIG. 21  illustrates a technique to detect obstructions on the roof, according to an embodiment. 
         FIG. 22  is a flow diagram of an automated 3D building estimation process, according to an embodiment. 
         FIG. 23  is a flow diagram of a pre-processing process for the 3D building estimation process of  FIG. 22 , according to an embodiment. 
         FIGS. 24A and 24B  are a flow diagram of a reconstruction process for the 3D building estimation process of  FIG. 22 , according to an embodiment. 
         FIGS. 25A and 25B  are before and after images illustrating a snapping algorithm to remove gaps between roof faces, according to an embodiment. 
         FIG. 26  is a top plan view of a 2D mesh overlying an image showing gap-free roof faces, according to an embodiment. 
         FIG. 27  illustrates shading by ray tracing against a 3D building model, obstructions and surrounding, according to an embodiment. 
         FIG. 28  is a process flow of automated solar energy system design using an estimated 3D building model generated as described in reference to  FIGS. 1-27 , according to an embodiment. 
         FIG. 29  is a block diagram of a computer architecture for implementing the features and processes described in reference to  FIGS. 1-28 . 
         FIG. 30  is a flow diagram of automated 3D building estimation process that predicts roof top outlines, pitches and heights based on aerial imagery and 3D data, according to an embodiment. 
         FIGS. 31A-31K  further illustrates the steps of an automated 3D building estimation process that predicts roof top outlines, pitches and heights from aerial imagery and 3D data, according to an embodiment. 
         FIG. 32  is a flow diagram illustrating the Monte Carlo Tree Search (MCTS) as applied to roof top outline prediction, according to an embodiment. 
         FIG. 33  is a flow diagram illustrating the prediction of pitch and height of roof top components, according to an embodiment. 
         FIGS. 34A and 34B  illustrate a full 3D model of a roof generated based on a process of automated 3D building estimation process that predicts roof top outlines, pitches and heights from imagery and 3D data, according to an embodiment. 
         FIG. 35  is a flow diagram of a process of automated 3D building estimation process that predicts roof top outlines, pitches and heights from imagery and 3D data, according to an embodiment. 
     
    
    
     The same reference symbol used in various drawings indicates like elements. 
     INTERPRETATION OF TERMS/FIGURES 
     In the following detailed description, for the purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding of the disclosed embodiments. It will be apparent, however, that the disclosed embodiments may be practiced without these specific details. In other instances, well-known structures and devices are shown in block diagram form in order to avoid unnecessarily obscuring the present invention. 
     In the drawings, specific arrangements or orderings of schematic elements, such as those representing devices, modules, instruction blocks and data elements, are shown for ease of description. However, it should be understood by those skilled in the art that the specific ordering or arrangement of the schematic elements in the drawings is not meant to imply that a particular order or sequence of processing, or separation of processes, is required. Further, the inclusion of a schematic element in a drawing is not meant to imply that such element is required in all embodiments or that the features represented by such element may not be included in or combined with other elements in some embodiments. 
     Further, in the drawings, where connecting elements, such as solid or dashed lines or arrows, are used to illustrate a connection, relationship, or association between or among two or more other schematic elements, the absence of any such connecting elements is not meant to imply that no connection, relationship, or association can exist. In other words, some connections, relationships, or associations between elements are not shown in the drawings so as not to obscure the disclosure. In addition, for ease of illustration, a single connecting element is used to represent multiple connections, relationships or associations between elements. For example, where a connecting element represents a communication of signals, data, or instructions, it should be understood by those skilled in the art that such element represents one or multiple signal paths (e.g., a bus), as may be needed, to affect the communication. 
     Several features are described hereafter that can each be used independently of one another or with any combination of other features. However, any individual feature may not address any of the problems discussed above or might only address one of the problems discussed above. Some of the problems discussed above might not be fully addressed by any of the features described herein. Although headings are provided, information related to a particular heading, but not found in the section having that heading, may also be found elsewhere in this description. 
     As used herein the term “one or more” includes a function being performed by one element, a function being performed by more than one element, e.g., in a distributed fashion, several functions being performed by one element, several functions being performed by several elements, or any combination of the above. It will also be understood that, although the terms first, second, etc. are, in some instances, used herein to describe various elements, these elements should not be limited by these terms. These terms are only used to distinguish one element from another. For example, a first contact could be termed a second contact, and, similarly, a second contact could be termed a first contact, without departing from the scope of the various described embodiments. The first contact and the second contact are both contacts, but they are not the same contact. The terminology used in the description of the various described embodiments herein is for the purpose of describing particular embodiments only and is not intended to be limiting. 
     As used in the description of the various disclosed embodiments and the appended claims, the singular forms “a,” “an” and “the” are intended to include the plural forms as well, unless the context clearly indicates otherwise. It will also be understood that the term “and/or” as used herein refers to and encompasses any and all possible combinations of one or more of the associated listed items. It will be further understood that the terms “includes,” “including,” “includes,” and/or “including,” when used in this description, specify the presence of stated features, integers, steps, operations, elements, and/or components, but do not preclude the presence or addition of one or more other features, integers, steps, operations, elements, components, and/or groups thereof. 
     As used herein, the term “if” is, optionally, construed to mean “when” or “upon” or “in response to determining” or “in response to detecting,” depending on the context. Similarly, the phrase “if it is determined” or “if [a stated condition or event] is detected” is, optionally, construed to mean “upon determining” or “in response to determining” or “upon detecting [the stated condition or event]” or “in response to detecting [the stated condition or event],” depending on the context. 
     Reference will now be made in detail to the disclosed embodiments, examples of which are illustrated in the accompanying drawings. In the following detailed description, numerous specific details are set forth to provide a thorough understanding of the various described embodiments. However, it will be apparent to one of ordinary skill in the art that the various disclosed embodiments may be practiced without these specific details. In other instances, well-known methods, procedures, components, circuits, and networks have not been described in detail so as not to unnecessarily obscure aspects of the disclosed embodiments. 
     DETAILED DESCRIPTION 
       FIG. 1  illustrates a graphical user interface (GUI)  100  of an automated solar energy system design tool, according to an embodiment. In the example shown, GUI  100  includes a 3D image  101  of building  103  with an address that was input by a user in text box  102 . A navigation control  105  allows the user to manipulate the viewing perspective of the 3D image (e.g., rotate, tilt). An output pane  104  displays the result of a performance simulation on a solar energy system design that was based on an estimated 3D building model, as described more fully below. In this example, the results include monthly savings in dollars, monthly offset in percentage and system size in kilowatts (kW). A GUI affordance  106  allows a user to request a quote for design and/or installation of the solar system. 
       FIG. 2  is a flow diagram of an automated process  200  for estimating 3D building models, according to an embodiment. Process  200  begins with a consumption module  202  which gathers various data needed for 3D building estimation, solar energy system design and simulation. Such data includes but is not limited to user input, such as input address of a building, billing information (e.g., the user&#39;s average monthly energy costs), utility rates and a consumption profile for the location of the building from a database of consumption profiles. The consumption profile includes energy consumption in kWh for every hour of the year. The utility rate can be looked up in a database. Using the energy consumption and utility rate the system computes the monthly cost of electricity, given hourly usage in kWh. 
     The input address of the building is used to obtain geodata  201  (e.g., images, 3D data) for the building from a geodatabase, such as the US Geological Survey Geographic Information System (GIS) or a proprietary database. For example, the 3D data can be a point cloud generated by light detection and ranging (LiDAR) sensor or obtained using photogrammetry and synthetic LiDAR. The 3D data can be in the form of a digital surface model (DSM), which is generated by rasterizing the point cloud data to a 2D grid/image so that it can be preprocessed with the 2D image data as described in further detail below. The preprocessed image and DSM is input into reconstruction module  203  which estimates a 3D building model and identifies any roof obstructions. Next, the estimated 3D building module and roof obstructions are input into shading module  204  that uses simulation to determine the amount of exposure the roof has to sunlight. The output of shading module  204  (e.g., irradiance data) is input into automated solar energy system design module  205  which automatically builds a virtual solar energy system based on the estimated 3D building model and shading module output. The virtual solar energy system can then be simulated to determine its performance using simulation module  206 . 
     In a separate processing pipeline, the data output by consumption module  202  (e.g., an energy consumption profile, utility rate) and the performance results (e.g., power output) from simulation module  206  are input into financial simulation  207  used to generate various financial data, including but not limited to monthly savings and offset, as shown in GUI  100  of  FIG. 1 . 
       FIG. 3  is an example input image  300  for a preprocessing pipeline, according to an embodiment. The goal of the preprocessing pipeline is to take an arbitrary image and 3D data and convert the image and data to a standard format that is easy for a neural network to handle during reconstruction. Image  300  is a 2D aerial image that can be captured using any suitable modality, including but not limited to fixed-wing aircraft, helicopters, unmanned aerial vehicles (aka “drones”), satellites, balloons, blimps and dirigibles, rockets, pigeons, kites, parachutes, stand-alone telescoping and vehicle-mounted poles. Images for a particular input address can be stored in an indexed database, such as the GIS or a proprietary database. 
       FIG. 4  is an example input 3D data for the preprocessing pipeline, according to an embodiment. The example shown is a LiDAR point cloud, which is a collection of points that represent a 3D shape or feature. In an embodiment, the raw point cloud data can be filtered to remove any outlier points caused by sensor noise before being used for 3D building estimation. Such filtering techniques can be statistical-based, neighborhood-based, projection-based, signal processing based or based on partial differential equations (PDF). Some example filtering techniques include but are not limited to: a voxel grid (VG) filter, normal-based bilateral filter (NBF), moving least square (MLS), weighted locally optimal projection (WLOP), edge aware resample (EAR) and L0 minimization (L0). As previously stated, the LiDAR point cloud can be fitted to a 2D grid to produce a DSM or height map. 
       FIGS. 5A and 5B  illustrate an example preprocessing output where the image and a DSM derived from 3D data are axis-aligned to a grid, cropped around the building and aligned with each other, according to an embodiment. As shown, a cropped image and DSM of the building are both axis-aligned to a grid and to each other. 
       FIG. 6  is a flow diagram of preprocessing pipeline  600 , according to an embodiment. In a LiDAR preprocessing path of preprocessing pipeline  600 , a 3D mesh is generated from the LiDAR data using a “spike free” triangulation method, such as described in Anahita Khosravipour et al. Generating spike-free digital surface models using LiDAR raw point clouds: A new approach for forestry applications.  International Journal of Applied Earth Observation and Geoinformation,  52:104-114, Jun. 5, 2016. 
     The term “spike free” refers to the way the method generates smooth meshes for trees. The 3D mesh is rasterized into a DSM or height map/image. Because the image and LiDAR data are not aligned to start with, the DSM (height map) and aerial image of the building are input into registration module  602  to align the LiDAR data and aerial image to a grid and to each other.  FIG. 7  illustrates the results of the “spike free” triangulation algorithm applied to the 3D LiDAR data to generate a 3D mesh, according to an embodiment.  FIGS. 8A and 8B  illustrate the registration process whereby the DSM and image are aligned, according to an embodiment. 
     Concurrently, in an image preprocessing path, the image is input into building segmentation module  602 . Building segmentation module  602  uses known image semantic segmentation techniques to label every pixel of the aerial image as building or non-building, resulting in a building mask, as shown in  FIGS. 10A and 10B . An example image semantic segmentation algorithm is described in Liang-Chieh Chen et al. Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation. https://arxiv.org/abs/1802.02611v3. 
     The building mask and aligned DSM/image are then input into orientation and cropping module  604 . Orientation and cropping module  604  use the LiDAR data within the building mask to calculate the orientation of each roof face. In an alternative embodiment, a neural network is used to predict roof face orientation. For example, the LiDAR data is used to calculate a dominant orientation for the entire roof, and then “snap” that orientation onto a 90 degree grid. The building mask is also used to obtain a basic extent of the building and to crop the image so that the building is centered in the image and axis-aligned, as shown in in  FIGS. 11A and 11B . After the preprocessing, the image and DSM are properly formatted for input into one or more neural networks, such as a convolutional neural network (CNN) or any other suitable neural network for reconstruction of a 3D building model, and in particular a 3D roof model. 
       FIGS. 9A-9C  further illustrate using semantic segmentation techniques separately on image  901  and DSM  902  to predict building structures  903 , trees  904  and background. Cross-correlation is used to calculate the location at which the image and DSM align, according to an embodiment, as shown in  FIG. 9C , where the light spot  905  indicates where the pixels of the two images are more closely aligned. An example cross-correlation technique is described in Briechle, Kai, and Uwe D. Hanebeck. Template matching using fast normalized cross correlation. Optical Pattern Recognition XII. Vol. 4387. International Society for Optics and Photonics, 2001. 
     Alternatively, image  901  and DSM  902  are feed into a neural network that is trained to predict the numerical offset between two images, such as described in Sergey Zagoruyko, Nikos Komodakis. Learning to Compare Image Patches Via Convolutional Neural Networks. CVPR.2015.7299064. Instead of predicting a similarity value, an x/y offset value between the image and DSM is predicted. 
       FIG. 12  is a flow diagram of a reconstruction process to produce a 3D building model from the preprocessed image and DSM, according to an embodiment. The preprocessed image/DSM is input into roof face segmentation module  1203 . Roof face segmentation module  1203  uses a neural network to generate a mask for each roof face using instance segmentation, such as described in Davy Neven et al. Instance Segmentation by Jointly Optimizing Spatial Embeddings and Clustering Bandwidth. (https://arxiv.org/abs/1906.11109v1). 
       FIG. 13  illustrates example roof face masks  1301 - 1311  generated by a neural network using instance segmentation techniques. After the roof face masks are generated, the masks are input into polygon fitting module  1204 , which uses basic heuristics to convert the masks into 2D polygons and to remove discontinuities. The LiDAR data is then used to project the 2D polygons into 3D polygons using RANSAC fitting, as described in Yang, Michael Ying, and Wolfgang Förstner. Plane detection in point cloud data.  Proceedings of the  2 nd int conf on machine control guidance, Bonn. Vol.  1. 2010. In an alternative embodiment, a neural network is used to predict 3D polygons from 2D polygons. 
     By converting roof face masks to polygons naively, gaps between the roof faces may be introduced, as shown in  FIG. 25A . By generating a 2D mesh instead of separate polygons, gap-free 2D roof faces can be generated, as shown in  FIG. 25B . In an embodiment, semantic segmentation techniques are used to predict edge and node probabilities for every pixel in the image. Poisson disk sampling is then used to select points along the nodes, edges and also uniformly across the image, as described in Cook, Robert L. Stochastic Sampling in Computer Graphics.  ACM transactions on Graphics,  5, 1, January 1986, pp. 51-72. 
     The disk radius is varied to sample more densely at the nodes and edges. A Delaunay triangulation is then performed to generate a 2D mesh. Each triangle in the 2D mesh is labeled according to its roof face. By combining all triangles in the 2D mesh with a given roof face label, a polygon is extracted for each roof face  2501 - 2507  that has no gap between adjacent roof faces, as shown in  FIG. 25B .  FIG. 26  is a top plan view of a 2D mesh overlying an image showing gap-free roof faces, according to an embodiment. 
       FIG. 14  illustrates using heuristics and polygon fitting to convert the roof planes into polygons, and then use the 3D data to project the 2D polygons into 3D polygons. Once the 3D polygons are generated, an edge of each polygon is selected to be an “azimuth edge,” and is assigned a height and pitch to define a 3D plane. For example, when the 2D polygons are projected into 3D polygons, the planes are forced to point in one of the four cardinal directions relative to the dominant roof orientation (left, right, up, down). For each possible direction, the slope and height of the plane is determined, since the azimuth/direction is fixed. The direction, slope, and height that fits best is then selected. For a south-facing roof face, there will be an edge running east-west that is flat and whose direction is perpendicular to the azimuth direction of the plane. Any point along the edge can be used to draw a plane with a given height and slope, such that the edge lies along the plane. 
     The last step in the roof face segmentation pipeline shown in  FIG. 12  is to input the 3D polygons into edge type detection module  1202 . Edge type detection module  1202  uses a neural network and known image semantic segmentation techniques to predict the edge types for all of the edges of the 3D polygons. Examples of edge types include but are not limited to: eave, rake, ridge, valley and hip. An example image semantic segmentation technique is described in Liang-Chieh Chen et al. Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation. (https://arxiv.org/abs/1802.02611v3). 
       FIG. 17  illustrates the output of a neural network for predicting edge types for all the edges of the 3D polygons, according to an embodiment. The predicted edge types are used for defining setbacks. For example, solar panels should not be placed near the edges of roof faces to allow access for firefighters, etc. 
     In a separate roof face process, a roof template database  1206  is searched for a matching roof template. In an embodiment, the process includes: 1) axis-aligning the image as previously described; 2) calculating an embedding for the image; 3) finding a roof template in database  1206  that is similar to the roof being reconstructed based on the embedding; 4) finding the height, width, length and position of the roof template; 5) overlaying the roof template on the roof image; 6) adjusting the internal structure of the roof template to match the roof image; and 7) checking if the roof template is more accurate than the roof faces generated by roof face segmentation module  1203 . After the checking step, one of the adjusted roof template or the roof faces generated by roof face segmentation module  1203  are selected to be included in the estimated 3D roof model. In an embodiment, steps 2 and 3 above use known metric learning techniques for retrieval of the roof templates, such as described in Florian Schroff et al. FaceNet: A Unified Embedding for Face Recognition and Clustering (https://arxiv.org/abs/1503.03832). 
       FIGS. 15A and 15B  illustrate the nonparametric retrieval technique described above. In step 6, a neural network is used to predict an offset for every node in the roof to adjust the internal structure of the roof template to match the image, as illustrated in  FIGS. 16A-16C . 
     In the process described above, an embedding is an N-dimensional vector (e.g., N=64) produced by a neural network. The neural network is trained so that if two roofs are similar, then their embedding will become close in the embedding space, and if they are dissimilar then their embeddings will be far apart. In step 4, the size of the template is known and the size of the target roof is estimated using the segmentation/alignment pipeline previously described. 
       FIGS. 18 and 19  illustrate an alternative technique for using a neural network for wall detection with a polygon fitting algorithm, according to an embodiment. A neural network is first used to predict for every row and column of an image grid containing the roof image, whether there is a wall for that row/column. A polygon fitting algorithm is then used to reconstruct the roof by combining all of the walls and roof planes and finding all possible intersections between them. Optimization is then used to choose which roof structure is the most accurate. An example polygon fitting algorithm is described in Nan, Liangliang, and Peter Wonka. Polyfit: Polygonal surface reconstruction from point clouds.  Proceedings of the IEEE International Conference on Computer Vision.  2017. 
       FIG. 20  illustrates a synthetic LiDAR technique wherein a neural network is used to compute a height map from a 2D image and then uses the height map to convert the 2D image into a rough 3D model of the building, according to an embodiment. This technique can perform reconstruction from only an image without any 3D data, as described in Srivastava, Shivangi, Michele Volpi, and Devis Tuia. Joint height estimation and semantic labeling of monocular aerial images with CNNs.  IEEE International Geoscience and Remote Sensing Symposium  ( IGARSS ). 2017. 
       FIG. 21  illustrates a technique to detect obstructions on the roof, according to an embodiment. Referring to  FIG. 12 , the image and DSM are input into obstruction detection module  1204 , which outputs rooftop obstructions. In an embodiment, obstruction detection module  1204  includes a neural network that is trained to predict rooftop obstructions using instance segmentation techniques, such as described in He, Kaiming, et al. Mask R-CNN.  Proceedings of the IEEE International Conference on Computer Vision,  2017. These rooftop obstructions show where solar panels cannot be installed and also objects that may cast shadows on the solar panels. 
     Referring back to  FIG. 2 , process flow  200  continues by automatically generating a virtual solar energy system based on the estimated roof model, shading/irradiance data (the flux of radiant energy per unit area) from a shading/irradiance model, component database and user preferences, as described in reference to  FIG. 28 . 
     The component database includes datasheets and price lists for commercially available solar energy equipment and hardware, including but not limited to: solar panels, inverters, monitoring equipment, racking and mounting hardware (e.g., rails, flashings, lugs, mounting brackets, wire clops, splice kits, braces, end caps, attachments, tilt legs), balancing hardware (e.g., DC/AC disconnects, junction boxes, combiner boxes, circuit breakers, fuses, load centers, rapid shutdowns, surge devices), wire, charge controllers, batteries, etc. 
     The system design is then simulated using performance simulation  206  to determine the electrical performance of the system design. The performance data resulting from performance simulation is used with utility rate data and a user consumption profile to determine monthly cost savings, monthly offset and other financial data that is useful to a consumer or professional solar energy panel installer. The performance simulation  206  uses the irradiance values computed according to the method described in reference to  FIG. 27 . Given the amount of irradiance on each panel, the amount of current each panel produces is estimated. Using circuit modeling, the system generates a combined IV curve for all of the solar panels connected in a string. The inverter is then simulated by finding the maximum power point and estimating the conversion efficiency into AC power to finally get the energy output in kWh for each hour. This calculation is performed, for example, for every hour or N minute increments (e.g., N=15) of a simulated year. 
     In an embodiment, the energy consumption profile and utility rate used in the consumption step are used to calculate energy costs for the building before the solar energy system is installed. The solar production is subtracted from energy consumption to get the post-solar energy consumption for every hour of a simulated year. The monthly bill for the new consumption values are then calculated. By comparing the two bills, the monthly savings of installing the solar energy system is calculated. 
     In an embodiment, further simulations can be run to calculate return on investment (ROI), net present value (NPV) and annual cash flows under different financing schemes like cash purchases, loans and leases. 
     Example Processes 
       FIG. 22  is a flow diagram of an automated 3D building estimation process  2200 , according to an embodiment. Process  2200  can be implemented using the computer architecture  2900  described in reference to  FIG. 29 . 
     Process  2200  begins by obtaining a building address, utility rate and billing information ( 2201 ) and obtaining 3D data and image data for the building address ( 2202 ). In an embodiment, the building address is entered by a user through a GUI of an online automated 3D building design tool. In an alternative embodiment, the address is obtained programmatically through an API, for example. In an embodiment, the utility rate can be obtained from a database of utility rates maintained by a utility company or obtained from a third party provider, such as Genability Inc. of San Francisco, Calif., USA. In an embodiment, the image data and 3D data is obtained from a public or proprietary database of images and 3D data that can be retrieved using the building address of the building. In an embodiment, the 3D data is 3D LiDAR data. 
     Process  2200  continues by performing 3D building/roof estimation using the 3D data and image ( 2203 ), and determining the usable roof area based on the 3D building/roof model and detected roof obstructions ( 2204 ), as described in reference to  FIGS. 2-21 . 
     Process  2200  continues by determining an installation location in the usable roof area for solar panels based on the usable roof area and shading/irradiance model ( 2205 ), and automatically designing a virtual solar energy system for the installation location ( 2206 ). 
     Process  2200  continues by performing a simulation of the virtual solar energy system at the installation location to determine performance and generate metrics ( 2207 ). 
     The metrics, such as monthly cost savings and offset, can be displayed to the user through a GUI of the automated design tool or provided in a report to a customer or professional solar panel installer. 
       FIG. 23  is a flow diagram of a pre-processing process  2300  for the 3D building estimation process of  FIG. 22 , according to an embodiment. Process  2300  can be implemented using the computer architecture  2900  described in reference to  FIG. 29 . 
     Process  2300  begins by generating a DSM from a 3D mesh ( 2301 ), as described in reference to  FIGS. 5-7 . For example, the DSM can be rasterized into a 2D image using a spike free 3D mesh of LiDAR data. 
     Process  2300  continues by aligning the image and DSM image so that they aligned to each other ( 2302 ), as described in reference to  FIGS. 6-9 . 
     Process  2300  continues by generating a building mask from the image ( 2303 ), and orienting, cropping and axis-aligning the image and DSM to a grid determine the orientation or each roof face using the building mask and 3D data ( 2304 ), as described in reference to  FIGS. 10-11 . The building mask is also used to obtain the building extent. 
       FIGS. 24A and 24B  are flow diagrams of a reconstruction processes  2400 ,  2500  for the 3D building estimation process of  FIG. 22 , according to an embodiment. Processes  2400 ,  2500  can be implemented using the computer architecture  2900  described in reference to  FIG. 29 . 
     Referring to  FIG. 24A , process  2400  begins by performing roof face segmentation to obtain 2D roof faces ( 2401 ), and then 3D polygon fitting the 2D roof faces using the image and 3D data ( 2402 ). For example, roof segmentation generates 2D roof faces, which are fitted to 2D polygons using heuristics to remove discontinuities, and then projected into 3D polygons using RANSAC fitting using the 3D data. Process  2400  continues by performing edge type detection on the 3D polygons using the image and DSM ( 2404 ). Examples of edge types include but are not limited to: eave, rake, ridge, valley and hip. Edge type detection can be implemented using semantic segmentation techniques. Process  2400  continues by performing obstruction detection using the image/DSM ( 2404 ). 
     Referring to  FIG. 24B , process  2405  begins by retrieving a roof template that matches the image/DSM ( 2406 ), as described in reference to  FIG. 14 , and then selecting either the 3D roof faces resulting from segmentation or the roof template as the 3D representation of the roof ( 2407 ). Processes  2400  and  2500  can be performed in parallel or in series. 
       FIG. 27  illustrates shading by ray tracing against a 3D building model, obstructions and surrounding, according to an embodiment. In an embodiment, shading is determined using ray tracing against a 3D model of the building  2700 , rooftop obstructions, and its surroundings. The LIDAR mesh (generated from the earlier spike free triangulation step) is used to model the building&#39;s surroundings, which can then cast shadows onto the building. For a given point on the roof or on a solar panel, the system calculates, for every hour of a simulated year, whether the solar panel is in shade. Additionally, the system calculates irradiance by combining weather data with shading information. Based on the angle of the solar panel surface relative to the sun, and based on whether the solar panel is in shade or not, the system calculates, for every hour of the simulated year, an amount of sunlight hitting the solar panel surface in W/m 2 . 
       FIG. 28  is a process flow  2800  of automated solar energy system design using an estimated 3D building model generated as described in reference to  FIGS. 1-27 , according to an embodiment. 
     Process  2800  begins by determining a grid of all possible panel locations based on the desired panel size and spacing ( 2801 ). Process  2800  continues by calculating, for every hour of the year, irradiance for each solar panel location based on weather data and the 3D model of the site, including the building, rooftop obstructions and its surroundings ( 2802 ). Process  2800  continues by estimating how much savings each potential panel will produce for every hour of the year based on its electrical characteristics and the utility rate ( 2803 ). Process  2800  continued by calculating the best set of panels to minimize cost and maximize savings ( 2804 ). For each potential model of inverter, process  2800  continues by determining the optimal number of inverters and connection of solar panels to each other and the inverter ( 2805 ). Given the combined panel/inverter system, process  2800  continues by re-evaluating the performance and savings ( 2806 ). The re-evaluation step reduces errors introduced by simplifying assumptions in earlier steps. The re-evaluation step also evaluates the cost and the aesthetics of the layout (e.g., are the panels in rectangular groups or irregular shapes). 
     Each step of process  2800  is run sequentially to generate a single optimal design using integer linear programming. Then, a genetic algorithm is used to make many small modifications at each step and determine which configurations produce the best design for the customer overall. 
     Example System Architecture 
       FIG. 29  is a block diagram of a computer architecture  2900  for implementing the features and processes described in reference to  FIGS. 1-28 . The architecture  2900  can be implemented on any electronic device that runs software applications derived from compiled instructions, including without limitation personal computers, servers, smart phones, media players, electronic tablets, game consoles, email devices, etc. In some implementations, the architecture  2900  can include one or more processors  2902 , one or more input devices  2904 , one or more display devices  2906 , one or more network interfaces  2908  and one or more computer-readable mediums  2910 . Each of these components are coupled by one or more buses  2912 . 
     Display device  2906  can be any known display technology, including but not limited to display devices using Liquid Crystal Display (LCD) or Light Emitting Diode (LED) technology. Processor(s)  2902  can use any known processor technology, including but are not limited to graphics processors and multi-core processors. 
     Input device  2904  can be any known input device technology, including but not limited to a keyboard (including a virtual keyboard), mouse, track ball, and touch-sensitive pad or display. In some implementations, the input device  2904  could include a microphone that facilitates voice-enabled functions, such as speech-to-text, speaker recognition, voice replication, digital recording, and telephony functions. The input device  2904  can be configured to facilitate processing voice commands, voiceprinting and voice authentication. In some implementations, audio recorded by the input device  2904  is transmitted to an external resource for processing. For example, voice commands recorded by the input device  2904  may be transmitted to a network resource such as a network server which performs voice recognition on the voice commands. 
     Bus  2912  can be any known internal or external bus technology, including but not limited to ISA, EISA, PCI, PCI Express, NuBus, USB, Serial ATA or FireWire. 
     Computer-readable medium  2910  can be any medium that participates in providing instructions to processor(s)  2902  for execution, including without limitation, non-volatile storage media (e.g., optical disks, magnetic disks, flash drives, etc.) or volatile media (e.g., SDRAM, ROM, etc.). Computer-readable medium  2910  can include various instructions  2914  for implementing operating system  2913  (e.g., Mac OS®, Windows®, Linux). Operating system  2913  can be multi-user, multiprocessing, multitasking, multithreading, real-time and the like. Operating system  2913  performs basic tasks, including but not limited to: recognizing input from input device  2904 ; sending output to display device  2906 ; keeping track of files and directories on computer-readable medium  2910 ; controlling peripheral devices (e.g., disk drives, printers, etc.) which can be controlled directly or through an I/O controller; and managing traffic on bus  2912 . Network communications instructions  2914  can establish and maintain network connections (e.g., software for implementing communication protocols, such as TCP/IP, HTTP, Ethernet, etc.). 
     Graphics processing system  2915  can include instructions that provide graphics and image processing capabilities. For example, graphics processing system  2915  can implement the GUIs described with reference to  FIGS. 1, 21A and 21B . 
     Application(s)  2916  can be an application that uses or implements the processes described in reference to  FIGS. 1-28 . The processes can also be implemented in operating system  2913 . 
     Predicting Roof Top Outlines, Pitches and Heights from Imagery and 3D Data 
       FIG. 30  is a flow diagram of automated 3D building estimation process  3000  that predicts roof top outlines, pitches and heights based on aerial imagery and 3D data, according to an embodiment. 
     In an embodiment, 2D aerial imagery and 3D data (e.g., Lidar data)  3001  are segmented and cropped  3002  to generate cropped image/DSM  3003 , as described in reference to  FIG. 6 . Cropped image/DSM  3003  is input into a roof face segmentation network  3004 , which generates a plurality of roof top faces representing a roof top component (hereinafter “roof top component”), where each roof top component includes a set of perimeter edges and folds. The perimeter edges collectively form an outline of the roof top. The folds are the internal points in the roof top component where the pitch of the roof face changes. Each perimeter edge and fold also have an associated height and pitch. 
     In an embodiment, process  3000  can be run in two configurations that determine when the heights and pitches for each perimeter edge or fold are predicted. In a first configuration, process  3000  predicts the locations of all the perimeter edges and folds first, and then predicts the heights and pitches for all the predicted edges or folds. In a second configuration, process  3000  alternates between predicting locations of perimeter edges and folds and predicting the heights and pitches for the predicted edges or folds, including making adjustments to previous height or pitch predictions. 
     In an embodiment, the location of each node of a perimeter edge or fold is predicted  3007  by a first machine learning model (e.g., neural network), which outputs a probability distribution over a potential next node or fold location. The probability distribution is used to guide a search process  3005  (e.g., a Monte Carlo Tree Search), that estimates how good each prediction of a next node or fold (or start or end component  3008 ) will be. The search process  3005  explores a specified number of steps forward and compares the roof top that will result from each possible next node or fold to the outputs of an instance segmentation network (not shown). The outputs of the instance segmentation network are treated as a close approximation to the actual 2D structure of the roof. The results of the search  3005  are used to update the probability distribution for predicting where the next node of a perimeter edge or fold should be. 
     The process described above continues iteratively outputting nodes/folds until the probability distribution from the search indicates  3009  that the roof is finished  3006 . If the first configuration is employed, the pitch and height are predicted  3009  after the roof is finished  3006 . If the second configuration is employed, process  3000  alternates between predicting locations and heights/pitches (for either folds or edges), including making adjustments to previous height/pitch predictions. After prediction, the roof components are rendered  3010  into 3D models  3011 , which are fused together to get the final 3D roof model. 
       FIGS. 31A-31K  further illustrates the steps of an automated 3D building estimation process that predicts roof top outlines, pitches and heights from aerial imagery and 3D data, according to an embodiment. 
     Each step of process  3000  shows a representation of the input (a cropped image/DSM) being processed. Based on the input, a new point is drawn after each step, so the point drawn in step i will show up in step i+1. Process  3000  draws a perimeter edge of a first roof component in steps 0-4 ( FIGS. 31A-31E ). In step 0 ( FIG. 31A ), process  3000  draws the lower right corner (not shown in  FIG. 31A  since it is just a point) and in step 1 process  3000  draws the upper right corner (not shown in  FIG. 31B  since it is just a point). In step 2, process  300  draws the right edge joining the upper and lower right corners ( FIG. 31C ). In step 3, process  3000  draws the upper left corner and an edge joining the upper left corner with the upper right corner ( FIG. 31D ). In step 4, process  3000  draws a lower left corner and an edge joining the lower left corner and the upper left corner ( FIG. 31E ). In step 5, process  3000  draws an edge joining the lower left corner and the lower right corner ( FIG. 31F ), which completes an outline of the first roof component shown at step 5 ( FIG. 31F ). 
     In steps 6-9 ( FIGS. 31G-31J ), a second roof component outline is drawn, starting with the upper left corner being drawn which is not visible in step 6 ( FIG. 31G ), but visible in step 7 ( FIG. 31H ) after another point and edge has been drawn joining the upper left and upper right corner ( FIG. 31H . In step 8, process  300  draws lower left corner and an edge joining the lower left corner with the upper left corner ( FIG. 31I ). In step 9, process  300  draws a lower right corner and an edge joining the lower left corner and the lower right corner ( FIG. 31J ) Process  3000  indicates that process  3000  is completed in step 10 ( FIG. 31K ). Process  3000  completes with two roof top component outlines, each with 4 perimeter edges. 
     Next, process  3000  predicts the heights and pitches for each of the perimeter edges using a second machine learning model (e.g., a neural network), as described in reference to  FIG. 33 , renders the 3D model for each roof top component and combines the 3D models, resulting in a full 3D model of the roof top, as shown in  FIGS. 34A and 34B . 
       FIG. 32  is a flow diagram illustrating the Monte Carlo Tree Search (MCTS)  3200 , according to an embodiment. MCTS includes consists four phases which are iterated for a determined number of times: selection, expansion, simulation and backpropagation. The higher the number of iterations, the more the tree grows and the easier is for the results to converge to a meaningful result. A root node is typically provided for starting the iterations. 
     In the selection phase, the root node goes through the selection phase, where a node is selected based on a largest Upper Confidence Bounds (UCB) formula value. The UCB formula tries to balance exploitation and exploration of the tree based on a constant C. 
     In the expansion phase, if a node has been visited (i.e., simulated using neural networks), its children nodes (or possible next states) are generated and added to the tree. Otherwise, the search continues to the simulation phase. 
     In an embodiment, the probability of each node being explored is a balance of at least three criteria: 1) how many times the nodes have been visited (to encourage exploration), 2) the network&#39;s estimate of how good the node is (this represents a prior estimate of the node&#39;s quality), and 3) the back-propagated value of that node if any paths that include that node have terminated (this incorporates observed evidence to improve the estimate of the node&#39;s quality). In sum, MCTS will explore nodes that it has not seen before, preferring nodes that the network indicates are valuable. This process continues until some terminating paths are found that are promising, and then the search narrows to those paths and focuses preferentially on those paths. 
     In the backpropagation phase, the value obtained at the simulation phase is propagated from the leaves to the root of the tree and the values of the nodes updated as visits. 
     Referring to  FIG. 32 , input roof representation  3201  is processed by neural network  3206 , which predicts locations of perimeter edges  3202 ,  3206  for two different roof top components, i.e., to different roof faces. The roof top representations (cropped image/DSM) with the perimeter edges  3203 ,  3206  are input in neural networks  3203 ,  3207 , which predict perimeter edge locations  3204 ,  3208  and  3210 . This process continues until all perimeter edges of a roof top component are located, resulting in an outlines  3205 ,  3209  and  3211  (comprising the perimeter edges) of the roof top components as shown. 
     Note that in the Example of  FIG. 32 , the root is the roof with no nodes predicted. To the right of the root are various paths the search explores where each extra image/DSM would constitute an expansion of the tree, which are explored based on the neural network&#39;s estimate of how good each ‘action’ (node) is. The confidence scores on the far right indicate a heuristic evaluation of the quality of a completed roof produced by taking a particular path. Whenever an end state is reach, the value is back-propagated up the tree to adjust the network&#39;s estimate of how good the actions leading to that state are. Once a specified number of simulations are run, the most promising action from the root is taken by choosing a node and the process is repeated from the next state. 
     In an embodiment, the confidence scores (e.g., probabilities) are generated by comparing the rendered roof to the face segmentation outputs. In the example shown, the top branch accurately predicts outlines  3205  for two roof top components and thus has a confidence score of 0.95. The middle branch predicts a single roof top component and has a confidence score of 0.56 because it fails to predict the second roof top component. The lower branch predicts two roof top components but one roof top component has an incorrect edge location, resulting in a confidence score of 0.74. 
       FIG. 33  is a flow diagram illustrating a process  3300  for the prediction of pitch and height of roof top components, according to an embodiment. In the example shown, input rooftop representation  3205  with two roof top components shown in  FIG. 32  are input in machine learning model (e.g., a neural network)  3301 , which predicts pitch and height for each edge of each component  3302 - 1 ,  3302 - 2  . . .  3302 -N, as shown in  FIG. 33 . In an embodiment, the network is trained using a dataset of roof drawings. Features can be created by a backbone CNN, and then extracted based on the locations of the edges and folds in the image. The extracted features are then passed to one or more prediction networks that output the specific pitch/height parameters. 
       FIGS. 34A and 34B  illustrate a full 3D model of a roof generated based on a process of automated 3D building estimation process described in reference to  FIGS. 30-33 . 
       FIG. 35  is a flow diagram of a process  3500  of an automated 3D building estimation process that predicts roof top outlines, pitches and heights from aerial imagery and 3D data, according to an embodiment. 
     Process  3500  includes the steps of: obtaining an aerial image of a building based on an input address ( 3501 ); obtaining three-dimensional (3D) data containing the building based on the input address ( 3501 ); pre-processing the aerial image and 3D data ( 3502 ); predicting, using a first machine learning model with a roof top face as input, an outline for each roof component ( 3503 ); predicting, using a second machine learning model with the roof top face and outline as input, a pitch and height of each roof component ( 3504 ); and rendering the 3D building model based on the predicted outline, pitch and height of each roof component ( 3505 ). 
     In the context of the disclosure, the features and processes described above may implemented entirely or partially in a software program comprising instructions and data stored on a machine readable medium. A machine readable medium may be any tangible medium that may contain, or store, a program or data for use by or in connection with an instruction execution system, apparatus, or device. The machine readable medium may be a machine readable storage medium. A machine readable medium may include but is not limited to an electronic, magnetic, optical, electromagnetic, infrared, or semiconductor system, apparatus, or device, or any suitable combination of the foregoing. More specific examples of the machine readable storage medium would include an electrical connection having one or more wires, a portable computer diskette, a hard disk, a random access memory (RAM), a read-only memory (ROM), an erasable programmable read-only memory (EPROM or Flash memory), an optical fiber, a portable compact disc read-only memory (CD-ROM), an optical storage device, a magnetic storage device, or any suitable combination of the foregoing. 
     Computer program code for carrying out the disclosed embodiments may be written in any combination of one or more programming languages. These computer program codes may be provided to a processor of a general purpose computer, special purpose computer, or other programmable data processing apparatus, such that the program codes, when executed by the processor of the computer or other programmable data processing apparatus, cause the functions/operations specified in the flowcharts and/or block diagrams to be implemented. The program code may execute entirely on a computer, partly on the computer, as a stand-alone software package, partly on the computer and partly on a remote computer or entirely on the remote computer or server. 
     Further, while operations are depicted in a particular order, this should not be understood as requiring that such operations be performed in the particular order shown or in sequential order, or that all illustrated operations be performed, to achieve desirable results. In certain circumstances, multitasking and parallel processing may be advantageous. Likewise, while several specific implementation details are contained in the above discussions, these should not be construed as limitations on the scope of any invention, or of what may be claimed, but rather as descriptions of features that may be specific to particular embodiments of particular inventions. Certain features that are described in this specification in the context of separate embodiments may also may be implemented in combination in a single embodiment. Conversely, various features that are described in the context of a single embodiment may also may be implemented in multiple embodiments separately or in any suitable sub-combination. 
     Various modifications, adaptations to the foregoing example embodiments disclosed herein may become apparent to those skilled in the relevant arts in view of the foregoing description, when read in conjunction with the accompanying drawings. Any and all modifications will still fall within the scope of the non-limiting and example embodiments of this invention. Furthermore, other embodiments not disclosed herein will come to mind to one skilled in the art as having the benefit of the teachings presented in the foregoing descriptions and the drawings. 
     In the foregoing description, embodiments of the invention have been described with reference to numerous specific details that may vary from implementation to implementation. The description and drawings are, accordingly, to be regarded in an illustrative rather than a restrictive sense. The sole and exclusive indicator of the scope of the invention, and what is intended by the applicants to be the scope of the invention, is the literal and equivalent scope of the set of claims that issue from this application, in the specific form in which such claims issue, including any subsequent correction. Any definitions expressly set forth herein for terms contained in such claims shall govern the meaning of such terms as used in the claims. In addition, when we use the term “further including,” in the foregoing description or following claims, what follows this phrase can be an additional step or entity, or a sub-step/sub-entity of a previously-recited step or entity.