kopia lustrzana https://github.com/OpenDroneMap/docs
601 wiersze
40 KiB
HTML
601 wiersze
40 KiB
HTML
|
||
|
||
<!DOCTYPE html>
|
||
<html class="writer-html5" lang="en" >
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
|
||
<title>Splitting Large Datasets — OpenDroneMap 2.5.8 documentation</title>
|
||
|
||
|
||
|
||
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
|
||
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
|
||
|
||
|
||
|
||
<link rel="shortcut icon" href="../_static/favicon.ico"/>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!--[if lt IE 9]>
|
||
<script src="../_static/js/html5shiv.min.js"></script>
|
||
<![endif]-->
|
||
|
||
|
||
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
|
||
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
|
||
<script src="../_static/jquery.js"></script>
|
||
<script src="../_static/underscore.js"></script>
|
||
<script src="../_static/doctools.js"></script>
|
||
|
||
<script type="text/javascript" src="../_static/js/theme.js"></script>
|
||
|
||
|
||
<link rel="index" title="Index" href="../genindex/" />
|
||
<link rel="search" title="Search" href="../search/" />
|
||
<link rel="next" title="Additional References" href="../resources/" />
|
||
<link rel="prev" title="Using Image Masks" href="../masks/" />
|
||
</head>
|
||
|
||
<body class="wy-body-for-nav">
|
||
|
||
|
||
<div class="wy-grid-for-nav">
|
||
|
||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||
<div class="wy-side-scroll">
|
||
<div class="wy-side-nav-search" >
|
||
|
||
|
||
|
||
<a href="../" class="icon icon-home"> OpenDroneMap
|
||
|
||
|
||
|
||
</a>
|
||
|
||
|
||
|
||
|
||
<div class="version">
|
||
2.5.8
|
||
</div>
|
||
|
||
|
||
|
||
|
||
<div role="search">
|
||
<form id="rtd-search-form" class="wy-form" action="../search/" method="get">
|
||
<input type="text" name="q" placeholder="Search docs" />
|
||
<input type="hidden" name="check_keywords" value="yes" />
|
||
<input type="hidden" name="area" value="default" />
|
||
</form>
|
||
</div>
|
||
|
||
|
||
</div>
|
||
|
||
|
||
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../installation/">Installation and Getting Started</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../installation/#hardware-recommendations">Hardware Recommendations</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../installation/#installation">Installation</a><ul>
|
||
<li class="toctree-l3"><a class="reference internal" href="../installation/#windows">Windows</a><ul>
|
||
<li class="toctree-l4"><a class="reference internal" href="../installation/#step-1-check-virtualization-support">Step 1. Check Virtualization Support</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="../installation/#step-2-install-requirements">Step 2. Install Requirements</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="../installation/#step-3-check-memory-and-cpu-allocation">Step 3. Check Memory and CPU Allocation</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="../installation/#step-4-download-webodm">Step 4. Download WebODM</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="../installation/#step-4-launch-webodm">Step 4. Launch WebODM</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l3"><a class="reference internal" href="../installation/#macos">macOS</a><ul>
|
||
<li class="toctree-l4"><a class="reference internal" href="../installation/#id1">Step 1. Check Virtualization Support</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="../installation/#id2">Step 2. Install Requirements</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="../installation/#id3">Step 3. Check Memory and CPU Allocation</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="../installation/#step-4-download-and-launch-webodm">Step 4. Download and Launch WebODM</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l3"><a class="reference internal" href="../installation/#linux">Linux</a><ul>
|
||
<li class="toctree-l4"><a class="reference internal" href="../installation/#step-1-install-requirements">Step 1. Install Requirements</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="../installation/#step-2-check-additional-requirements">Step 2. Check Additional Requirements</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="../installation/#step-3-download-and-launch-webodm">Step 3. Download and Launch WebODM</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../installation/#basic-commands-and-troubleshooting">Basic Commands and Troubleshooting</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../installation/#hello-webodm">Hello, WebODM!</a><ul>
|
||
<li class="toctree-l3"><a class="reference internal" href="../installation/#running-on-more-than-one-machine">Running on more than one machine</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul class="current">
|
||
<li class="toctree-l1"><a class="reference internal" href="../tutorials/">Tutorials</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../tutorials/#creating-high-quality-orthophotos">Creating High Quality Orthophotos</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../tutorials/#calibrating-the-camera">Calibrating the Camera</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../tutorials/#creating-digital-elevation-models">Creating Digital Elevation Models</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../tutorials/#measuring-stockpile-volume">Measuring stockpile volume</a><ul>
|
||
<li class="toctree-l3"><a class="reference internal" href="../tutorials/#fieldwork-planning">Fieldwork planning</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="../tutorials/#flight-pattern">Flight pattern</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="../tutorials/#flight-height">Flight height</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="../tutorials/#gcps">GCPs</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="../tutorials/#processing-parameters">Processing parameters</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="../tutorials/#measuring">Measuring</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="../tutorials/#expected-accuracy">Expected accuracy</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../tutorials/#using-docker">Using Docker</a><ul>
|
||
<li class="toctree-l3"><a class="reference internal" href="../tutorials/#listing-docker-machines">Listing Docker Machines</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="../tutorials/#accessing-logs-on-the-instance">Accessing logs on the instance</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="../tutorials/#command-line-access-to-instances">Command line access to instances</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="../tutorials/#cleaning-up-after-docker">Cleaning up after Docker</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../tutorials/#using-odm-from-low-bandwidth-location">Using ODM from low-bandwidth location</a><ul>
|
||
<li class="toctree-l3"><a class="reference internal" href="../tutorials/#what-is-this-and-who-is-it-for">What is this and who is it for?</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="../tutorials/#steps">Steps</a><ul>
|
||
<li class="toctree-l4"><a class="reference internal" href="../tutorials/#install">Install</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="../tutorials/#prep-data-and-project">Prep data and project</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="../tutorials/#resize-droplet-pull-pin-run-away">Resize droplet, pull pin, run away</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="../tutorials/#after-it-finishes-assuming-you-survive-that-long">After it finishes (assuming you survive that long)</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../arguments/">Options and Flags</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/build-overviews/">build-overviews</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/camera-lens/">camera-lens</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/cameras/">cameras</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/cog/">cog</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/copy-to/">copy-to</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/crop/">crop</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/debug/">debug</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/dem-decimation/">dem-decimation</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/dem-euclidean-map/">dem-euclidean-map</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/dem-gapfill-steps/">dem-gapfill-steps</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/dem-resolution/">dem-resolution</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/depthmap-resolution/">depthmap-resolution</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/dsm/">dsm</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/dtm/">dtm</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/end-with/">end-with</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/fast-orthophoto/">fast-orthophoto</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/feature-quality/">feature-quality</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/feature-type/">feature-type</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/force-gps/">force-gps</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/gcp/">gcp</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/geo/">geo</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/gps-accuracy/">gps-accuracy</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/help/">help</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/ignore-gsd/">ignore-gsd</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/matcher-distance/">matcher-distance</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/matcher-neighbors/">matcher-neighbors</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/matcher-type/">matcher-type</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/max-concurrency/">max-concurrency</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/merge/">merge</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/mesh-octree-depth/">mesh-octree-depth</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/mesh-size/">mesh-size</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/min-num-features/">min-num-features</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/name/">name</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/optimize-disk-space/">optimize-disk-space</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/orthophoto-compression/">orthophoto-compression</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/orthophoto-cutline/">orthophoto-cutline</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/orthophoto-kmz/">orthophoto-kmz</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/orthophoto-no-tiled/">orthophoto-no-tiled</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/orthophoto-png/">orthophoto-png</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/orthophoto-resolution/">orthophoto-resolution</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/pc-classify/">pc-classify</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/pc-csv/">pc-csv</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/pc-ept/">pc-ept</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/pc-filter/">pc-filter</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/pc-geometric/">pc-geometric</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/pc-las/">pc-las</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/pc-quality/">pc-quality</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/pc-rectify/">pc-rectify</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/pc-sample/">pc-sample</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/pc-tile/">pc-tile</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/primary-band/">primary-band</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/project-path/">project-path</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/radiometric-calibration/">radiometric-calibration</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/rerun/">rerun</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/rerun-all/">rerun-all</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/rerun-from/">rerun-from</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/resize-to/">resize-to</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/skip-3dmodel/">skip-3dmodel</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/skip-band-alignment/">skip-band-alignment</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/skip-report/">skip-report</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/sm-cluster/">sm-cluster</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/smrf-scalar/">smrf-scalar</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/smrf-slope/">smrf-slope</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/smrf-threshold/">smrf-threshold</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/smrf-window/">smrf-window</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/split/">split</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/split-image-groups/">split-image-groups</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/split-overlap/">split-overlap</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/texturing-data-term/">texturing-data-term</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/texturing-keep-unseen-faces/">texturing-keep-unseen-faces</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/texturing-outlier-removal-type/">texturing-outlier-removal-type</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/texturing-skip-global-seam-leveling/">texturing-skip-global-seam-leveling</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/texturing-skip-local-seam-leveling/">texturing-skip-local-seam-leveling</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/texturing-tone-mapping/">texturing-tone-mapping</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/tiles/">tiles</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/time/">time</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/use-3dmesh/">use-3dmesh</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/use-exif/">use-exif</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/use-fixed-camera-params/">use-fixed-camera-params</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/use-hybrid-bundle-adjustment/">use-hybrid-bundle-adjustment</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/verbose/">verbose</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../arguments/version/">version</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../outputs/">OpenDroneMap Outputs</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../outputs/#point-cloud">Point Cloud</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../outputs/#d-textured-model">3D Textured Model</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../outputs/#orthophoto">Orthophoto</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../outputs/#dtm-dsm">DTM/DSM</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../outputs/#list-of-all-outputs">List of all outputs</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../gcp/">Ground Control Points</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../gcp/#recommended-practices-for-gcp-setting">Recommended practices for GCP setting</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../gcp/#gcp-file-format">GCP file format</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../gcp/#user-interfaces">User Interfaces</a><ul>
|
||
<li class="toctree-l3"><a class="reference internal" href="../gcp/#id1">POSM GCPi</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="../gcp/#id2">GCP Editor Pro</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../gcp/#references">References</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../map-accuracy/">Map accuracy</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../map-accuracy/#what-to-expect">What to expect</a><ul>
|
||
<li class="toctree-l3"><a class="reference internal" href="../map-accuracy/#aspects-impacting-map-accuracy">Aspects impacting map accuracy</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../map-accuracy/#references">References</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../geo/">Image Geolocation Files</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../masks/">Using Image Masks</a></li>
|
||
<li class="toctree-l1 current"><a class="current reference internal" href="#">Splitting Large Datasets</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="#calibrate-images">Calibrate images</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="#local-split-merge">Local Split-Merge</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="#distributed-split-merge">Distributed Split-Merge</a><ul>
|
||
<li class="toctree-l3"><a class="reference internal" href="#getting-started-with-distributed-split-merge">Getting Started with Distributed Split-Merge</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="#understanding-the-cluster">Understanding the Cluster</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="#accessing-the-logs">Accessing the Logs</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="#autoscaling-clusterodm">Autoscaling ClusterODM</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l2"><a class="reference internal" href="#limitations">Limitations</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="#acknowledgments">Acknowledgments</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../resources/">Additional References</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../resources/#for-users">For Users</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../resources/#for-developers">For Developers</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../flying/">Flying Tips</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../multispectral/">Multispectral Support</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../multispectral/#hardware">Hardware</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../multispectral/#usage">Usage</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../requesting-features/">How To Request Features</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../contributing/">How To Contribute</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../contributing/#community-forum">Community Forum</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../contributing/#reporting-bugs">Reporting Bugs</a><ul>
|
||
<li class="toctree-l3"><a class="reference internal" href="../contributing/#template-for-submitting-bug-reports">Template For Submitting Bug Reports</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../contributing/#pull-requests">Pull Requests</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../faq/">Frequently Asked Questions</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../faq/#data-processing">Data Processing</a><ul>
|
||
<li class="toctree-l3"><a class="reference internal" href="../faq/#can-i-process-two-or-more-orthophoto-geotiffs-to-stitch-them-together">Can I process two or more orthophoto GeoTIFFs to stitch them together?</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../faq/#licensing">Licensing</a><ul>
|
||
<li class="toctree-l3"><a class="reference internal" href="../faq/#i-want-to-build-a-commercial-application-that-includes-odm-do-i-need-a-commercial-license">I want to build a commercial application that includes ODM. Do I need a commercial license?</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="../faq/#are-there-other-licensing-options-aside-from-the-agplv3">Are there other licensing options aside from the AGPLv3?</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
|
||
|
||
|
||
</div>
|
||
|
||
</div>
|
||
</nav>
|
||
|
||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||
|
||
|
||
<nav class="wy-nav-top" aria-label="top navigation">
|
||
|
||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||
<a href="../">OpenDroneMap</a>
|
||
|
||
</nav>
|
||
|
||
|
||
<div class="wy-nav-content">
|
||
|
||
<div class="rst-content">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div role="navigation" aria-label="breadcrumbs navigation">
|
||
|
||
<ul class="wy-breadcrumbs">
|
||
|
||
<li><a href="../" class="icon icon-home"></a> »</li>
|
||
|
||
<li>Splitting Large Datasets</li>
|
||
|
||
|
||
<li class="wy-breadcrumbs-aside">
|
||
|
||
|
||
<a href="../_sources/large.rst.txt" rel="nofollow"> View page source</a>
|
||
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
|
||
<hr/>
|
||
</div>
|
||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||
<div itemprop="articleBody">
|
||
|
||
<div class="section" id="splitting-large-datasets">
|
||
<h1>Splitting Large Datasets<a class="headerlink" href="#splitting-large-datasets" title="Permalink to this headline">¶</a></h1>
|
||
<p>Starting with ODM version <code class="docutils literal notranslate"><span class="pre">0.6.0</span></code> you can split up very large datasets into manageable chunks (called submodels), running the pipeline on each chunk, and then producing merged DEMs, orthophotos and point clouds. The process is referred to as “split-merge”.</p>
|
||
<p>Why might you use the split-merge pipeline? If you have a very large number of images in your dataset, split-merge will help make the processing more manageable on a large machine (it will require less memory). If you have many machines all connected to the same network you can also process the submodels in parallel, thus allowing for horizontal scaling and processing thousands of images more quickly.</p>
|
||
<p>Split-merge works in WebODM out of the box as long as the processing nodes support split-merge, by enabling the <code class="docutils literal notranslate"><span class="pre">--split</span></code> option when creating a new task.</p>
|
||
<div class="section" id="calibrate-images">
|
||
<h2>Calibrate images<a class="headerlink" href="#calibrate-images" title="Permalink to this headline">¶</a></h2>
|
||
<p>Image calibration is recommended (but not required) for large datasets because error propagation due to image distortion could cause a bowl effect on the models. Calibration instructions can be found at <a class="reference external" href="tutorials.html#calibrating-the-camera">Calibrate Images</a>.</p>
|
||
<div class="figure align-center">
|
||
<img alt="image of lens distortion effect on bowling of data" src="../_images/msimbasi_bowling.png" />
|
||
</div>
|
||
<p>Bowling effect on point cloud over 13,000+ image dataset collected by World Bank Tanzania over the flood prone Msimbasi Basin, Dar es Salaam, Tanzania.</p>
|
||
</div>
|
||
<div class="section" id="local-split-merge">
|
||
<h2>Local Split-Merge<a class="headerlink" href="#local-split-merge" title="Permalink to this headline">¶</a></h2>
|
||
<p>Splitting a dataset into more manageable submodels and sequentially processing all submodels on the same machine is easy! Just use <code class="docutils literal notranslate"><span class="pre">--split</span></code> and <code class="docutils literal notranslate"><span class="pre">--split-overlap</span></code> to decide the the average number of images per submodels and the overlap (in meters) between submodels respectively</p>
|
||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>docker run -ti --rm -v /my/project:/datasets/code opendronemap/odm --project-path /datasets --split <span class="m">400</span> --split-overlap <span class="m">100</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>If you already know how you want to split the dataset, you can provide that information and it will be used instead of the clustering algorithm.</p>
|
||
<p>The grouping can be provided by adding a file named image_groups.txt in the main dataset folder. The file should have one line per image. Each line should have two words: first the name of the image and second the name of the group it belongs to. For example:</p>
|
||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="mf">01.</span><span class="n">jpg</span> <span class="n">A</span>
|
||
<span class="mf">02.</span><span class="n">jpg</span> <span class="n">A</span>
|
||
<span class="mf">03.</span><span class="n">jpg</span> <span class="n">B</span>
|
||
<span class="mf">04.</span><span class="n">jpg</span> <span class="n">B</span>
|
||
<span class="mf">05.</span><span class="n">jpg</span> <span class="n">C</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>will create 3 submodels. Make sure to pass <code class="docutils literal notranslate"><span class="pre">--split-overlap</span> <span class="pre">0</span></code> if you manually provide a <code class="docutils literal notranslate"><span class="pre">image_groups.txt</span></code> file.</p>
|
||
</div>
|
||
<div class="section" id="distributed-split-merge">
|
||
<h2>Distributed Split-Merge<a class="headerlink" href="#distributed-split-merge" title="Permalink to this headline">¶</a></h2>
|
||
<p>ODM can also automatically distribute the processing of each submodel to multiple machines via <a class="reference external" href="https://github.com/OpenDroneMap/NodeODM">NodeODM</a> nodes, orchestrated via <a class="reference external" href="https://github.com/OpenDroneMap/ClusterODM">ClusterODM</a>.</p>
|
||
<div class="figure align-center">
|
||
<img alt="image of lens distortion effect on bowling of data" src="../_images/clusterodm.png" />
|
||
</div>
|
||
<div class="section" id="getting-started-with-distributed-split-merge">
|
||
<h3>Getting Started with Distributed Split-Merge<a class="headerlink" href="#getting-started-with-distributed-split-merge" title="Permalink to this headline">¶</a></h3>
|
||
<p>The first step is start ClusterODM</p>
|
||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>docker run -ti -p <span class="m">3001</span>:3000 -p <span class="m">8080</span>:8080 opendronemap/clusterodm
|
||
</pre></div>
|
||
</div>
|
||
<p>Then on each machine you want to use for processing, launch a NodeODM instance via</p>
|
||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>docker run -ti -p <span class="m">3000</span>:3000 opendronemap/nodeodm
|
||
</pre></div>
|
||
</div>
|
||
<p>Connect via telnet to ClusterODM and add the IP addresses/port of the machines running NodeODM</p>
|
||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ telnet <cluster-odm-ip> <span class="m">8080</span>
|
||
Connected to <cluster-odm-ip>.
|
||
Escape character is <span class="s1">'^]'</span>.
|
||
<span class="o">[</span>...<span class="o">]</span>
|
||
<span class="c1"># node add <node-odm-ip-1> 3000</span>
|
||
<span class="c1"># node add <node-odm-ip-2> 3000</span>
|
||
<span class="o">[</span>...<span class="o">]</span>
|
||
<span class="c1"># node list</span>
|
||
<span class="m">1</span><span class="o">)</span> <node-odm-ip-1>:3000 <span class="o">[</span>online<span class="o">]</span> <span class="o">[</span><span class="m">0</span>/2<span class="o">]</span> <version <span class="m">1</span>.5.1>
|
||
<span class="m">2</span><span class="o">)</span> <node-odm-ip-2>:3000 <span class="o">[</span>online<span class="o">]</span> <span class="o">[</span><span class="m">0</span>/2<span class="o">]</span> <version <span class="m">1</span>.5.1>
|
||
</pre></div>
|
||
</div>
|
||
<p>Make sure you are running version <code class="docutils literal notranslate"><span class="pre">1.5.1</span></code> or higher of the NodeODM API.</p>
|
||
<p>At this point, simply use the <code class="docutils literal notranslate"><span class="pre">--sm-cluster</span></code> option to enable distributed split-merge</p>
|
||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>docker run -ti --rm -v /my/project:/datasets/code opendronemap/odm --project-path /datasets --split <span class="m">800</span> --split-overlap <span class="m">120</span> --sm-cluster http://<cluster-odm-ip>:3001
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="understanding-the-cluster">
|
||
<h3>Understanding the Cluster<a class="headerlink" href="#understanding-the-cluster" title="Permalink to this headline">¶</a></h3>
|
||
<p>When connected via telnet, it is possible to interrogate what is happening on the cluster. For example, we can use the command HELP to find out available commands</p>
|
||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># HELP</span>
|
||
NODE ADD <hostname> <port> <span class="o">[</span>token<span class="o">]</span> - Add new node
|
||
NODE DEL <node number> - Remove a node
|
||
NODE INFO <node number> - View node info
|
||
NODE LIST - List nodes
|
||
NODE LOCK <node number> - Stop forwarding tasks to this node
|
||
NODE UNLOCK <node number> - Resume forwarding tasks to this node
|
||
NODE UPDATE - Update all nodes info
|
||
NODE BEST <number of images> - Show best node <span class="k">for</span> the number of images
|
||
ROUTE INFO <taskId> - Find route information <span class="k">for</span> task
|
||
ROUTE LIST <span class="o">[</span>node number<span class="o">]</span> - List routes
|
||
TASK LIST <span class="o">[</span>node number<span class="o">]</span> - List tasks
|
||
TASK INFO <taskId> - View task info
|
||
TASK OUTPUT <taskId> <span class="o">[</span>lines<span class="o">]</span> - View task output
|
||
TASK CANCEL <taskId> - Cancel task
|
||
TASK REMOVE <taskId> - Remove task
|
||
ASR VIEWCMD <number of images> - View <span class="nb">command</span> used to create a machine
|
||
!! - Repeat last <span class="nb">command</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>If, for example, the NodeODM instance wasn’t active when ClusterODM started, we might list nodes and see something as follows</p>
|
||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># NODE LIST</span>
|
||
<span class="m">1</span><span class="o">)</span> localhost:3000 <span class="o">[</span>offline<span class="o">]</span> <span class="o">[</span><span class="m">0</span>/2<span class="o">]</span> <version <span class="m">1</span>.5.3> <span class="o">[</span>L<span class="o">]</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>To address this, we can start up our local node (if not already started), and then perform a <code class="docutils literal notranslate"><span class="pre">NODE</span> <span class="pre">UPDATE</span></code></p>
|
||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># NODE UPDATE</span>
|
||
OK
|
||
<span class="c1"># NODE LIST</span>
|
||
<span class="m">1</span><span class="o">)</span> localhost:3000 <span class="o">[</span>online<span class="o">]</span> <span class="o">[</span><span class="m">0</span>/2<span class="o">]</span> <version <span class="m">1</span>.5.3> <span class="o">[</span>L<span class="o">]</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="accessing-the-logs">
|
||
<h3>Accessing the Logs<a class="headerlink" href="#accessing-the-logs" title="Permalink to this headline">¶</a></h3>
|
||
<p>While a process is running, it is also possible to list the tasks, and view the task output</p>
|
||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># TASK LIST</span>
|
||
<span class="c1"># TASK OUTPUT <taskId> [lines]</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="autoscaling-clusterodm">
|
||
<h3>Autoscaling ClusterODM<a class="headerlink" href="#autoscaling-clusterodm" title="Permalink to this headline">¶</a></h3>
|
||
<p>ClusterODM also includes the option to autoscale on multiple platforms, including, to date, Amazon and Digital Ocean. This allows users to reduce costs associated with always-on instances as well as being able to scale processing based on demand.</p>
|
||
<p>To setup autoscaling you must:</p>
|
||
<ul class="simple">
|
||
<li><p>Have a functioning version of NodeJS installed and then install ClusterODM</p></li>
|
||
</ul>
|
||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>git clone https://github.com/OpenDroneMap/ClusterODM
|
||
<span class="nb">cd</span> ClusterODM
|
||
npm install
|
||
</pre></div>
|
||
</div>
|
||
<ul class="simple">
|
||
<li><p>Make sure docker-machine is installed.</p></li>
|
||
<li><p>Setup a S3-compatible bucket for storing results.</p></li>
|
||
<li><p>Create a configuration file for <a class="reference external" href="https://github.com/OpenDroneMap/ClusterODM/blob/master/docs/digitalocean.md">DigitalOcean</a> or <a class="reference external" href="https://github.com/OpenDroneMap/ClusterODM/blob/master/docs/aws.md">Amazon Web Services</a>.</p></li>
|
||
</ul>
|
||
<p>You can then launch ClusterODM with</p>
|
||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>node index.js --asr configuration.json
|
||
</pre></div>
|
||
</div>
|
||
<p>You should see something similar to following messages in the console</p>
|
||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>info: ASR: DigitalOceanAsrProvider
|
||
info: Can write to S3
|
||
info: Found docker-machine executable
|
||
</pre></div>
|
||
</div>
|
||
<p>You should always have at least one static NodeODM node attached to ClusterODM, even if you plan to use the autoscaler for all processing. If you setup auto scaling, you can’t have zero nodes and rely 100% on the autoscaler. You need to attach a NodeODM node to act as the “reference node” otherwise ClusterODM will not know how to handle certain requests (for the forwarding the UI, for validating options prior to spinning up an instance, etc.). For this purpose, you should add a “dummy” NodeODM node and lock it</p>
|
||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>telnet localhost <span class="m">8080</span>
|
||
> NODE ADD localhost <span class="m">3001</span>
|
||
> NODE LOCK <span class="m">1</span>
|
||
> NODE LIST
|
||
<span class="m">1</span><span class="o">)</span> localhost:3001 <span class="o">[</span>online<span class="o">]</span> <span class="o">[</span><span class="m">0</span>/2<span class="o">]</span> <version <span class="m">1</span>.5.1> <span class="o">[</span>L<span class="o">]</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>This way all tasks will be automatically forwarded to the autoscaler.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="limitations">
|
||
<h2>Limitations<a class="headerlink" href="#limitations" title="Permalink to this headline">¶</a></h2>
|
||
<p>The 3D textured meshes are currently not being merged as part of the workflow (only point clouds, DEMs and orthophotos are).</p>
|
||
<p>GCPs are fully supported, however, there needs to be at least 3 GCP points on each submodel for the georeferencing to take place. If a submodel has fewer than 3 GCPs, a combination of the remaining GCPs + EXIF data will be used instead (which is going to be less accurate). We recommend using the <code class="docutils literal notranslate"><span class="pre">image_groups.txt</span></code> file to accurately control the submodel split when using GCPs.</p>
|
||
</div>
|
||
<div class="section" id="acknowledgments">
|
||
<h2>Acknowledgments<a class="headerlink" href="#acknowledgments" title="Permalink to this headline">¶</a></h2>
|
||
<p>Huge props to Pau and the folks at Mapillary for their amazing contributions to OpenDroneMap through their OpenSfM code, which is a key component of the split-merge pipeline. We look forward to further pushing the limits of OpenDroneMap and seeing how big a dataset we can process.</p>
|
||
<p><a class="reference external" href="https://github.com/opendronemap/docs#how-to-make-your-first-contribution">Learn to edit</a> and help improve <a class="reference external" href="https://github.com/OpenDroneMap/docs/blob/publish/source/large.rst">this page</a>!</p>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<footer>
|
||
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
|
||
<a href="../resources/" class="btn btn-neutral float-right" title="Additional References" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||
<a href="../masks/" class="btn btn-neutral float-left" title="Using Image Masks" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
|
||
</div>
|
||
|
||
<hr/>
|
||
|
||
<div role="contentinfo">
|
||
<p>
|
||
© Copyright 2020, OpenDroneMap.
|
||
|
||
</p>
|
||
</div>
|
||
|
||
|
||
|
||
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
||
|
||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
||
|
||
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||
|
||
</footer>
|
||
</div>
|
||
</div>
|
||
|
||
</section>
|
||
|
||
</div>
|
||
|
||
|
||
<script type="text/javascript">
|
||
jQuery(function () {
|
||
SphinxRtdTheme.Navigation.enable(true);
|
||
});
|
||
</script>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</body>
|
||
</html> |