You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pytorch-image-models/scripts/index.html

1317 lines
28 KiB

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Pretained Image Recognition Models">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.0.6">
<title>Scripts - Pytorch Image Models</title>
<link rel="stylesheet" href="../assets/stylesheets/main.2c0c5eaf.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.7fa14f5b.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Roboto Mono"}</style>
</head>
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="none" data-md-color-accent="none">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#scripts" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="Pytorch Image Models" class="md-header__button md-logo" aria-label="Pytorch Image Models" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Pytorch Image Models
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Scripts
</span>
</div>
</div>
</div>
<div class="md-header__options">
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/rwightman/pytorch-image-models/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05L244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
rwightman/pytorch-image-models
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href=".." title="Pytorch Image Models" class="md-nav__button md-logo" aria-label="Pytorch Image Models" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
Pytorch Image Models
</label>
<div class="md-nav__source">
<a href="https://github.com/rwightman/pytorch-image-models/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05L244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
rwightman/pytorch-image-models
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
Getting Started
</a>
</li>
<li class="md-nav__item">
<a href="../models/" class="md-nav__link">
Model Summaries
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_3" type="checkbox" id="__nav_3" >
<label class="md-nav__link" for="__nav_3">
Model Pages
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Model Pages" data-md-level="1">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Model Pages
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../models/adversarial-inception-v3/" class="md-nav__link">
Adversarial Inception v3
</a>
</li>
<li class="md-nav__item">
<a href="../models/advprop/" class="md-nav__link">
AdvProp (EfficientNet)
</a>
</li>
<li class="md-nav__item">
<a href="../models/big-transfer/" class="md-nav__link">
Big Transfer (BiT)
</a>
</li>
<li class="md-nav__item">
<a href="../models/csp-darknet/" class="md-nav__link">
CSP-DarkNet
</a>
</li>
<li class="md-nav__item">
<a href="../models/csp-resnet/" class="md-nav__link">
CSP-ResNet
</a>
</li>
<li class="md-nav__item">
<a href="../models/csp-resnext/" class="md-nav__link">
CSP-ResNeXt
</a>
</li>
<li class="md-nav__item">
<a href="../models/densenet/" class="md-nav__link">
DenseNet
</a>
</li>
<li class="md-nav__item">
<a href="../models/dla/" class="md-nav__link">
Deep Layer Aggregation
</a>
</li>
<li class="md-nav__item">
<a href="../models/dpn/" class="md-nav__link">
Dual Path Network (DPN)
</a>
</li>
<li class="md-nav__item">
<a href="../models/ecaresnet/" class="md-nav__link">
ECA-ResNet
</a>
</li>
<li class="md-nav__item">
<a href="../models/efficientnet-pruned/" class="md-nav__link">
EfficientNet (Knapsack Pruned)
</a>
</li>
<li class="md-nav__item">
<a href="../models/efficientnet/" class="md-nav__link">
EfficientNet
</a>
</li>
<li class="md-nav__item">
<a href="../models/ensemble-adversarial/" class="md-nav__link">
Ensemble Adversarial Inception ResNet v2
</a>
</li>
<li class="md-nav__item">
<a href="../models/ese-vovnet/" class="md-nav__link">
ESE-VoVNet
</a>
</li>
<li class="md-nav__item">
<a href="../models/fbnet/" class="md-nav__link">
FBNet
</a>
</li>
<li class="md-nav__item">
<a href="../models/gloun-inception-v3/" class="md-nav__link">
(Gluon) Inception v3
</a>
</li>
<li class="md-nav__item">
<a href="../models/gloun-resnet/" class="md-nav__link">
(Gluon) ResNet
</a>
</li>
<li class="md-nav__item">
<a href="../models/gloun-resnext/" class="md-nav__link">
(Gluon) ResNeXt
</a>
</li>
<li class="md-nav__item">
<a href="../models/gloun-senet/" class="md-nav__link">
(Gluon) SENet
</a>
</li>
<li class="md-nav__item">
<a href="../models/gloun-seresnext/" class="md-nav__link">
(Gluon) SE-ResNeXt
</a>
</li>
<li class="md-nav__item">
<a href="../models/gloun-xception/" class="md-nav__link">
(Gluon) Xception
</a>
</li>
<li class="md-nav__item">
<a href="../models/hrnet/" class="md-nav__link">
HRNet
</a>
</li>
<li class="md-nav__item">
<a href="../models/ig-resnext/" class="md-nav__link">
Instagram ResNeXt WSL
</a>
</li>
<li class="md-nav__item">
<a href="../models/inception-resnet-v2/" class="md-nav__link">
Inception ResNet v2
</a>
</li>
<li class="md-nav__item">
<a href="../models/inception-v3/" class="md-nav__link">
Inception v3
</a>
</li>
<li class="md-nav__item">
<a href="../models/inception-v4/" class="md-nav__link">
Inception v4
</a>
</li>
<li class="md-nav__item">
<a href="../models/legacy-se-resnet/" class="md-nav__link">
(Legacy) SE-ResNet
</a>
</li>
<li class="md-nav__item">
<a href="../models/legacy-se-resnext/" class="md-nav__link">
(Legacy) SE-ResNeXt
</a>
</li>
<li class="md-nav__item">
<a href="../models/legacy-senet/" class="md-nav__link">
(Legacy) SENet
</a>
</li>
<li class="md-nav__item">
<a href="../models/mixnet/" class="md-nav__link">
MixNet
</a>
</li>
<li class="md-nav__item">
<a href="../models/mnasnet/" class="md-nav__link">
MnasNet
</a>
</li>
<li class="md-nav__item">
<a href="../models/mobilenet-v2/" class="md-nav__link">
MobileNet v2
</a>
</li>
<li class="md-nav__item">
<a href="../models/mobilenet-v3/" class="md-nav__link">
MobileNet v3
</a>
</li>
<li class="md-nav__item">
<a href="../models/nasnet/" class="md-nav__link">
NASNet
</a>
</li>
<li class="md-nav__item">
<a href="../models/noisy-student/" class="md-nav__link">
Noisy Student (EfficientNet)
</a>
</li>
<li class="md-nav__item">
<a href="../models/pnasnet/" class="md-nav__link">
PNASNet
</a>
</li>
<li class="md-nav__item">
<a href="../models/regnetx/" class="md-nav__link">
RegNetX
</a>
</li>
<li class="md-nav__item">
<a href="../models/regnety/" class="md-nav__link">
RegNetY
</a>
</li>
<li class="md-nav__item">
<a href="../models/res2net/" class="md-nav__link">
Res2Net
</a>
</li>
<li class="md-nav__item">
<a href="../models/res2next/" class="md-nav__link">
Res2NeXt
</a>
</li>
<li class="md-nav__item">
<a href="../models/resnest/" class="md-nav__link">
ResNeSt
</a>
</li>
<li class="md-nav__item">
<a href="../models/resnet-d/" class="md-nav__link">
ResNet-D
</a>
</li>
<li class="md-nav__item">
<a href="../models/resnet/" class="md-nav__link">
ResNet
</a>
</li>
<li class="md-nav__item">
<a href="../models/resnext/" class="md-nav__link">
ResNeXt
</a>
</li>
<li class="md-nav__item">
<a href="../models/rexnet/" class="md-nav__link">
RexNet
</a>
</li>
<li class="md-nav__item">
<a href="../models/se-resnet/" class="md-nav__link">
SE-ResNet
</a>
</li>
<li class="md-nav__item">
<a href="../models/selecsls/" class="md-nav__link">
SelecSLS
</a>
</li>
<li class="md-nav__item">
<a href="../models/seresnext/" class="md-nav__link">
SE-ResNeXt
</a>
</li>
<li class="md-nav__item">
<a href="../models/skresnet/" class="md-nav__link">
SK-ResNet
</a>
</li>
<li class="md-nav__item">
<a href="../models/skresnext/" class="md-nav__link">
SK-ResNeXt
</a>
</li>
<li class="md-nav__item">
<a href="../models/spnasnet/" class="md-nav__link">
SPNASNet
</a>
</li>
<li class="md-nav__item">
<a href="../models/ssl-resnet/" class="md-nav__link">
SSL ResNet
</a>
</li>
<li class="md-nav__item">
<a href="../models/ssl-resnext/" class="md-nav__link">
SSL ResNeXT
</a>
</li>
<li class="md-nav__item">
<a href="../models/swsl-resnet/" class="md-nav__link">
SWSL ResNet
</a>
</li>
<li class="md-nav__item">
<a href="../models/swsl-resnext/" class="md-nav__link">
SWSL ResNeXt
</a>
</li>
<li class="md-nav__item">
<a href="../models/tf-efficientnet-condconv/" class="md-nav__link">
(Tensorflow) EfficientNet CondConv
</a>
</li>
<li class="md-nav__item">
<a href="../models/tf-efficientnet-lite/" class="md-nav__link">
(Tensorflow) EfficientNet Lite
</a>
</li>
<li class="md-nav__item">
<a href="../models/tf-efficientnet/" class="md-nav__link">
(Tensorflow) EfficientNet
</a>
</li>
<li class="md-nav__item">
<a href="../models/tf-inception-v3/" class="md-nav__link">
(Tensorflow) Inception v3
</a>
</li>
<li class="md-nav__item">
<a href="../models/tf-mixnet/" class="md-nav__link">
(Tensorflow) MixNet
</a>
</li>
<li class="md-nav__item">
<a href="../models/tf-mobilenet-v3/" class="md-nav__link">
(Tensorflow) MobileNet v3
</a>
</li>
<li class="md-nav__item">
<a href="../models/tresnet/" class="md-nav__link">
TResNet
</a>
</li>
<li class="md-nav__item">
<a href="../models/vision-transformer/" class="md-nav__link">
Vision Transformer (ViT)
</a>
</li>
<li class="md-nav__item">
<a href="../models/wide-resnet/" class="md-nav__link">
Wide ResNet
</a>
</li>
<li class="md-nav__item">
<a href="../models/xception/" class="md-nav__link">
Xception
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../results/" class="md-nav__link">
Results
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
Scripts
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
Scripts
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#training-script" class="md-nav__link">
Training Script
</a>
</li>
<li class="md-nav__item">
<a href="#validation-inference-scripts" class="md-nav__link">
Validation / Inference Scripts
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../training_hparam_examples/" class="md-nav__link">
Training Examples
</a>
</li>
<li class="md-nav__item">
<a href="../feature_extraction/" class="md-nav__link">
Feature Extraction
</a>
</li>
<li class="md-nav__item">
<a href="../changes/" class="md-nav__link">
Recent Changes
</a>
</li>
<li class="md-nav__item">
<a href="../archived_changes/" class="md-nav__link">
Archived Changes
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#training-script" class="md-nav__link">
Training Script
</a>
</li>
<li class="md-nav__item">
<a href="#validation-inference-scripts" class="md-nav__link">
Validation / Inference Scripts
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/rwightman/pytorch-image-models/edit/master/docs/scripts.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
</a>
<h1 id="scripts">Scripts</h1>
<p>A train, validation, inference, and checkpoint cleaning script included in the github root folder. Scripts are not currently packaged in the pip release.</p>
<p>The training and validation scripts evolved from early versions of the <a href="https://github.com/pytorch/examples">PyTorch Imagenet Examples</a>. I have added significant functionality over time, including CUDA specific performance enhancements based on
<a href="https://github.com/NVIDIA/apex/tree/master/examples">NVIDIA's APEX Examples</a>.</p>
<h2 id="training-script">Training Script</h2>
<p>The variety of training args is large and not all combinations of options (or even options) have been fully tested. For the training dataset folder, specify the folder to the base that contains a <code>train</code> and <code>validation</code> folder.</p>
<p>To train an SE-ResNet34 on ImageNet, locally distributed, 4 GPUs, one process per GPU w/ cosine schedule, random-erasing prob of 50% and per-pixel random value:</p>
<p><code>./distributed_train.sh 4 /data/imagenet --model seresnet34 --sched cosine --epochs 150 --warmup-epochs 5 --lr 0.4 --reprob 0.5 --remode pixel --batch-size 256 --amp -j 4</code></p>
<p>NOTE: It is recommended to use PyTorch 1.7+ w/ PyTorch native AMP and DDP instead of APEX AMP. <code>--amp</code> defaults to native AMP as of timm ver 0.4.3. <code>--apex-amp</code> will force use of APEX components if they are installed.</p>
<h2 id="validation-inference-scripts">Validation / Inference Scripts</h2>
<p>Validation and inference scripts are similar in usage. One outputs metrics on a validation set and the other outputs topk class ids in a csv. Specify the folder containing validation images, not the base as in training script. </p>
<p>To validate with the model's pretrained weights (if they exist):</p>
<p><code>python validate.py /imagenet/validation/ --model seresnext26_32x4d --pretrained</code></p>
<p>To run inference from a checkpoint:</p>
<p><code>python inference.py /imagenet/validation/ --model mobilenetv3_large_100 --checkpoint ./output/train/model_best.pth.tar</code></p>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="../results/" class="md-footer__link md-footer__link--prev" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
Results
</div>
</div>
</a>
<a href="../training_hparam_examples/" class="md-footer__link md-footer__link--next" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Next
</span>
Training Examples
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../assets/javascripts/workers/search.fb4a9340.min.js", "version": null}</script>
<script src="../assets/javascripts/bundle.a1c7c35e.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-MML-AM_CHTML"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tablesort/5.2.1/tablesort.min.js"></script>
<script src="../javascripts/tables.js"></script>
</body>
</html>