-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Documenter.jl
committed
Jul 10, 2024
1 parent
74cbf1d
commit 030e3b2
Showing
3 changed files
with
3 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
{"documenter":{"julia_version":"1.10.2","generation_timestamp":"2024-04-24T14:55:31","documenter_version":"1.4.0"}} | ||
{"documenter":{"julia_version":"1.10.4","generation_timestamp":"2024-07-10T07:42:55","documenter_version":"1.4.0"}} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
<!DOCTYPE html> | ||
<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>PoseErrors.jl · PoseErrors</title><meta name="title" content="PoseErrors.jl · PoseErrors"/><meta property="og:title" content="PoseErrors.jl · PoseErrors"/><meta property="twitter:title" content="PoseErrors.jl · PoseErrors"/><meta name="description" content="Documentation for PoseErrors."/><meta property="og:description" content="Documentation for PoseErrors."/><meta property="twitter:description" content="Documentation for PoseErrors."/><script data-outdated-warner src="assets/warner.js"></script><link href="https://cdnjs.cloudflare.com/ajax/libs/lato-font/3.0.0/css/lato-font.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/juliamono/0.050/juliamono.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL="."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="assets/documenter.js"></script><script src="search_index.js"></script><script src="siteinfo.js"></script><script src="../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="assets/themeswap.js"></script></head><body><div id="documenter"><nav class="docs-sidebar"><div class="docs-package-name"><span class="docs-autofit"><a href>PoseErrors</a></span></div><button class="docs-search-query input is-rounded is-small is-clickable my-2 mx-auto py-1 px-2" id="documenter-search-query">Search docs (Ctrl + /)</button><ul class="docs-menu"><li class="is-active"><a class="tocitem" href>PoseErrors.jl</a><ul class="internal"><li class="toplevel"><a class="tocitem" href="#Setup-for-BOP-dataset-evaluation"><span>Setup for BOP dataset evaluation</span></a></li><li><a class="tocitem" href="#Loading-the-BOP-datasets"><span>Loading the BOP datasets</span></a></li><li class="toplevel"><a class="tocitem" href="#Maximum-Distance-of-Model-Points-for-indistinguishable-views-(MDD-S)"><span>Maximum Distance of Model Points for indistinguishable views (MDD-S)</span></a></li></ul></li><li><a class="tocitem" href="methods/">Methods</a></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><a class="docs-sidebar-button docs-navbar-link fa-solid fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a><nav class="breadcrumb"><ul class="is-hidden-mobile"><li class="is-active"><a href>PoseErrors.jl</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>PoseErrors.jl</a></li></ul></nav><div class="docs-right"><a class="docs-navbar-link" href="https://github.com/rwth-irt/PoseErrors.jl" title="View the repository on GitHub"><span class="docs-icon fa-brands"></span><span class="docs-label is-hidden-touch">GitHub</span></a><a class="docs-navbar-link" href="https://github.com/rwth-irt/PoseErrors.jl/blob/main/docs/src/index.md" title="Edit source on GitHub"><span class="docs-icon fa-solid"></span></a><a class="docs-settings-button docs-navbar-link fa-solid fa-gear" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-article-toggle-button fa-solid fa-chevron-up" id="documenter-article-toggle-button" href="javascript:;" title="Collapse all docstrings"></a></div></header><article class="content" id="documenter-page"><h1 id="PoseErrors.jl"><a class="docs-heading-anchor" href="#PoseErrors.jl">PoseErrors.jl</a><a id="PoseErrors.jl-1"></a><a class="docs-heading-anchor-permalink" href="#PoseErrors.jl" title="Permalink"></a></h1><p>A good overview and rationale behind 6D pose error metrics can be found in the <a href="https://bop.felk.cvut.cz/challenges/bop-challenge-2019/#evaluationmethodology">BOP-challenge</a>. They prefer Maximum Symmetry-Aware Surface Distance (MSSD) over Averade Average Distance of Model Points with indistinguishable views (ADD-S = ADI), because they can yield low errors with bad visual alignment. Moreover, ADD-S is dominated by higher-frequency surface parts (e.g. a Thread). Maximum distances do not suffer from the surface sampling density as much.</p><p>However, annotating the symmetries is tedious and heavily depends on the choice of coordinate frames. For a large set of objects like surgical instruments which are not exported in a standardized / symmetry aligned frame, this is impractical. So, similar to (<a href="https://doi.org/10.3390/jimaging8030053">Gorschlüter et al. 2022</a>) we use ADD-S and VDS (<a href="https://doi.org/10.1007/978-3-319-49409-8_52">Hodan et. al 2016</a>) as metrics.</p><h1 id="Setup-for-BOP-dataset-evaluation"><a class="docs-heading-anchor" href="#Setup-for-BOP-dataset-evaluation">Setup for BOP dataset evaluation</a><a id="Setup-for-BOP-dataset-evaluation-1"></a><a class="docs-heading-anchor-permalink" href="#Setup-for-BOP-dataset-evaluation" title="Permalink"></a></h1><p>Extract the BOP datasets as described on their <a href="https://bop.felk.cvut.cz/datasets/">website</a>. Move the detections JSON to the matching datasets test directory and rename it to <code>default_detections.json</code>, e.g. <em>datasets/tless/default_detections.json</em>.</p><p>You could also you the keyword argument <code>detections_file</code> of <code>scene_test_targets</code> to specify another file in the test directory.</p><h2 id="Loading-the-BOP-datasets"><a class="docs-heading-anchor" href="#Loading-the-BOP-datasets">Loading the BOP datasets</a><a id="Loading-the-BOP-datasets-1"></a><a class="docs-heading-anchor-permalink" href="#Loading-the-BOP-datasets" title="Permalink"></a></h2><p>Your first entry points should be the methods to load the according targets. These load the required image files, mesh files, camera parameters, etc.</p><ul><li><code>gt_targets</code>: Loads the ground truth pose as <code>:gt_t</code> and <code>:gt_R</code>, the <strong>ground truth</strong> visible bounding box, and the <strong>gt</strong> mask image paths.</li><li><code>test_targets</code>: the <strong>estimated</strong> bounding box, and the <strong>estimated</strong> segmentation masks.</li></ul><p>Iterate each row and load cropped images via:</p><ul><li><code>load_color_img(row, width, height)</code> </li><li><code>load_depth_img(row, width, height)</code> scaled in meters as Float32</li><li><code>load_mask_img(row, width, height)</code> masks the visible object surface either gt from disk or from the detections file in the test targets.</li></ul><h1 id="Maximum-Distance-of-Model-Points-for-indistinguishable-views-(MDD-S)"><a class="docs-heading-anchor" href="#Maximum-Distance-of-Model-Points-for-indistinguishable-views-(MDD-S)">Maximum Distance of Model Points for indistinguishable views (MDD-S)</a><a id="Maximum-Distance-of-Model-Points-for-indistinguishable-views-(MDD-S)-1"></a><a class="docs-heading-anchor-permalink" href="#Maximum-Distance-of-Model-Points-for-indistinguishable-views-(MDD-S)" title="Permalink"></a></h1><p>To avoid defining symmetries and the influence of the mesh sampling, we implement the MDD-S by replacing the <span>$avg$</span> in ADD-S with <span>$max$</span>:</p><p class="math-container">\[e_{MDDS}(\hat{\mathbf{P}},\mathbf{P};\mathcal{M})= \max_{\mathbf{x}_1 \in \mathcal{M}} \min_{\mathbf{x}_2 \in \mathcal{M}} \parallel \hat{\mathbf{P}} \mathbf{x}_1 - \mathbf{P} \mathbf{x}_2 \parallel_2\]</p><p>As (<a href="https://doi.org/10.1007/978-3-319-49409-8_52">Hodan et. al 2016</a>) describe ADD-S as the lower bound of the ADD error. However, the symmetric transformation is a subtle difference which results in MDD-S not being a lower bound of MSSD. It heavily depends on the set of global symmetries used and makes comparability impossible.</p><p><img src="assets/mdds_no_bound.jpg" alt="MDD-S not lower boud of MDDS"/></p></article><nav class="docs-footer"><a class="docs-footer-nextpage" href="methods/">Methods »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="auto">Automatic (OS)</option><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 1.4.0 on <span class="colophon-date" title="Wednesday 24 April 2024 14:55">Wednesday 24 April 2024</span>. Using Julia version 1.10.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> | ||
<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>PoseErrors.jl · PoseErrors</title><meta name="title" content="PoseErrors.jl · PoseErrors"/><meta property="og:title" content="PoseErrors.jl · PoseErrors"/><meta property="twitter:title" content="PoseErrors.jl · PoseErrors"/><meta name="description" content="Documentation for PoseErrors."/><meta property="og:description" content="Documentation for PoseErrors."/><meta property="twitter:description" content="Documentation for PoseErrors."/><script data-outdated-warner src="assets/warner.js"></script><link href="https://cdnjs.cloudflare.com/ajax/libs/lato-font/3.0.0/css/lato-font.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/juliamono/0.050/juliamono.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL="."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="assets/documenter.js"></script><script src="search_index.js"></script><script src="siteinfo.js"></script><script src="../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="assets/themeswap.js"></script></head><body><div id="documenter"><nav class="docs-sidebar"><div class="docs-package-name"><span class="docs-autofit"><a href>PoseErrors</a></span></div><button class="docs-search-query input is-rounded is-small is-clickable my-2 mx-auto py-1 px-2" id="documenter-search-query">Search docs (Ctrl + /)</button><ul class="docs-menu"><li class="is-active"><a class="tocitem" href>PoseErrors.jl</a><ul class="internal"><li class="toplevel"><a class="tocitem" href="#Setup-for-BOP-dataset-evaluation"><span>Setup for BOP dataset evaluation</span></a></li><li><a class="tocitem" href="#Loading-the-BOP-datasets"><span>Loading the BOP datasets</span></a></li><li class="toplevel"><a class="tocitem" href="#Maximum-Distance-of-Model-Points-for-indistinguishable-views-(MDD-S)"><span>Maximum Distance of Model Points for indistinguishable views (MDD-S)</span></a></li></ul></li><li><a class="tocitem" href="methods/">Methods</a></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><a class="docs-sidebar-button docs-navbar-link fa-solid fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a><nav class="breadcrumb"><ul class="is-hidden-mobile"><li class="is-active"><a href>PoseErrors.jl</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>PoseErrors.jl</a></li></ul></nav><div class="docs-right"><a class="docs-navbar-link" href="https://github.com/rwth-irt/PoseErrors.jl" title="View the repository on GitHub"><span class="docs-icon fa-brands"></span><span class="docs-label is-hidden-touch">GitHub</span></a><a class="docs-navbar-link" href="https://github.com/rwth-irt/PoseErrors.jl/blob/main/docs/src/index.md" title="Edit source on GitHub"><span class="docs-icon fa-solid"></span></a><a class="docs-settings-button docs-navbar-link fa-solid fa-gear" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-article-toggle-button fa-solid fa-chevron-up" id="documenter-article-toggle-button" href="javascript:;" title="Collapse all docstrings"></a></div></header><article class="content" id="documenter-page"><h1 id="PoseErrors.jl"><a class="docs-heading-anchor" href="#PoseErrors.jl">PoseErrors.jl</a><a id="PoseErrors.jl-1"></a><a class="docs-heading-anchor-permalink" href="#PoseErrors.jl" title="Permalink"></a></h1><p>A good overview and rationale behind 6D pose error metrics can be found in the <a href="https://bop.felk.cvut.cz/challenges/bop-challenge-2019/#evaluationmethodology">BOP-challenge</a>. They prefer Maximum Symmetry-Aware Surface Distance (MSSD) over Averade Average Distance of Model Points with indistinguishable views (ADD-S = ADI), because they can yield low errors with bad visual alignment. Moreover, ADD-S is dominated by higher-frequency surface parts (e.g. a Thread). Maximum distances do not suffer from the surface sampling density as much.</p><p>However, annotating the symmetries is tedious and heavily depends on the choice of coordinate frames. For a large set of objects like surgical instruments which are not exported in a standardized / symmetry aligned frame, this is impractical. So, similar to (<a href="https://doi.org/10.3390/jimaging8030053">Gorschlüter et al. 2022</a>) we use ADD-S and VDS (<a href="https://doi.org/10.1007/978-3-319-49409-8_52">Hodan et. al 2016</a>) as metrics.</p><h1 id="Setup-for-BOP-dataset-evaluation"><a class="docs-heading-anchor" href="#Setup-for-BOP-dataset-evaluation">Setup for BOP dataset evaluation</a><a id="Setup-for-BOP-dataset-evaluation-1"></a><a class="docs-heading-anchor-permalink" href="#Setup-for-BOP-dataset-evaluation" title="Permalink"></a></h1><p>Extract the BOP datasets as described on their <a href="https://bop.felk.cvut.cz/datasets/">website</a>. Move the detections JSON to the matching datasets test directory and rename it to <code>default_detections.json</code>, e.g. <em>datasets/tless/default_detections.json</em>.</p><p>You could also you the keyword argument <code>detections_file</code> of <code>scene_test_targets</code> to specify another file in the test directory.</p><h2 id="Loading-the-BOP-datasets"><a class="docs-heading-anchor" href="#Loading-the-BOP-datasets">Loading the BOP datasets</a><a id="Loading-the-BOP-datasets-1"></a><a class="docs-heading-anchor-permalink" href="#Loading-the-BOP-datasets" title="Permalink"></a></h2><p>Your first entry points should be the methods to load the according targets. These load the required image files, mesh files, camera parameters, etc.</p><ul><li><code>gt_targets</code>: Loads the ground truth pose as <code>:gt_t</code> and <code>:gt_R</code>, the <strong>ground truth</strong> visible bounding box, and the <strong>gt</strong> mask image paths.</li><li><code>test_targets</code>: the <strong>estimated</strong> bounding box, and the <strong>estimated</strong> segmentation masks.</li></ul><p>Iterate each row and load cropped images via:</p><ul><li><code>load_color_img(row, width, height)</code> </li><li><code>load_depth_img(row, width, height)</code> scaled in meters as Float32</li><li><code>load_mask_img(row, width, height)</code> masks the visible object surface either gt from disk or from the detections file in the test targets.</li></ul><h1 id="Maximum-Distance-of-Model-Points-for-indistinguishable-views-(MDD-S)"><a class="docs-heading-anchor" href="#Maximum-Distance-of-Model-Points-for-indistinguishable-views-(MDD-S)">Maximum Distance of Model Points for indistinguishable views (MDD-S)</a><a id="Maximum-Distance-of-Model-Points-for-indistinguishable-views-(MDD-S)-1"></a><a class="docs-heading-anchor-permalink" href="#Maximum-Distance-of-Model-Points-for-indistinguishable-views-(MDD-S)" title="Permalink"></a></h1><p>To avoid defining symmetries and the influence of the mesh sampling, we implement the MDD-S by replacing the <span>$avg$</span> in ADD-S with <span>$max$</span>:</p><p class="math-container">\[e_{MDDS}(\hat{\mathbf{P}},\mathbf{P};\mathcal{M})= \max_{\mathbf{x}_1 \in \mathcal{M}} \min_{\mathbf{x}_2 \in \mathcal{M}} \parallel \hat{\mathbf{P}} \mathbf{x}_1 - \mathbf{P} \mathbf{x}_2 \parallel_2\]</p><p>As (<a href="https://doi.org/10.1007/978-3-319-49409-8_52">Hodan et. al 2016</a>) describe ADD-S as the lower bound of the ADD error. However, the symmetric transformation is a subtle difference which results in MDD-S not being a lower bound of MSSD. It heavily depends on the set of global symmetries used and makes comparability impossible.</p><p><img src="assets/mdds_no_bound.jpg" alt="MDD-S not lower boud of MDDS"/></p></article><nav class="docs-footer"><a class="docs-footer-nextpage" href="methods/">Methods »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="auto">Automatic (OS)</option><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 1.4.0 on <span class="colophon-date" title="Wednesday 10 July 2024 07:42">Wednesday 10 July 2024</span>. Using Julia version 1.10.4.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> |
Oops, something went wrong.