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/archived_changes/index.html

726 lines
24 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="shortcut icon" href="../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-5.4.0">
<title>Archived Changes - Pytorch Image Models</title>
<link rel="stylesheet" href="../assets/stylesheets/main.fe0cca5b.min.css">
<link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
<style>body,input{font-family:"Roboto",-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono",SFMono-Regular,Consolas,Menlo,monospace}</style>
</head>
<body dir="ltr">
<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="#archived-changes" 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-nav md-grid" aria-label="Header">
<a href=".." title="Pytorch Image Models" class="md-header-nav__button md-logo" aria-label="Pytorch Image Models">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 003-3 3 3 0 00-3-3 3 3 0 00-3 3 3 3 0 003 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-nav__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-nav__title" data-md-component="header-title">
<div class="md-header-nav__ellipsis">
<span class="md-header-nav__topic md-ellipsis">
Pytorch Image Models
</span>
<span class="md-header-nav__topic md-ellipsis">
Archived Changes
</span>
</div>
</div>
<label class="md-header-nav__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 0116 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 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.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">
<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 0116 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 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.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" data-md-component="search-reset" 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-nav__source">
<a href="https://github.com/rwightman/pytorch-image-models/" title="Go to repository" class="md-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 00-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 01-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 000 40.81l195.61 195.6a28.86 28.86 0 0040.8 0l194.69-194.69a28.86 28.86 0 000-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="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">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 003-3 3 3 0 00-3-3 3 3 0 00-3 3 3 3 0 003 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">
<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 00-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 01-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 000 40.81l195.61 195.6a28.86 28.86 0 0040.8 0l194.69-194.69a28.86 28.86 0 000-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=".." title="Getting Started" class="md-nav__link">
Getting Started
</a>
</li>
<li class="md-nav__item">
<a href="../models/" title="Model Architectures" class="md-nav__link">
Model Architectures
</a>
</li>
<li class="md-nav__item">
<a href="../results/" title="Results" class="md-nav__link">
Results
</a>
</li>
<li class="md-nav__item">
<a href="../scripts/" title="Scripts" class="md-nav__link">
Scripts
</a>
</li>
<li class="md-nav__item">
<a href="../training_hparam_examples/" title="Training Examples" class="md-nav__link">
Training Examples
</a>
</li>
<li class="md-nav__item">
<a href="../feature_extraction/" title="Feature Extraction" class="md-nav__link">
Feature Extraction
</a>
</li>
<li class="md-nav__item">
<a href="../changes/" title="Recent Changes" class="md-nav__link">
Recent Changes
</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">
Archived Changes
<span class="md-nav__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 9h14V7H3v2m0 4h14v-2H3v2m0 4h14v-2H3v2m16 0h2v-2h-2v2m0-10v2h2V7h-2m0 6h2v-2h-2v2z"/></svg>
</span>
</label>
<a href="./" title="Archived Changes" class="md-nav__link md-nav__link--active">
Archived Changes
</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">
<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>
</span>
Table of contents
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="#feb-29-2020" class="md-nav__link">
Feb 29, 2020
</a>
</li>
<li class="md-nav__item">
<a href="#feb-18-2020" class="md-nav__link">
Feb 18, 2020
</a>
</li>
<li class="md-nav__item">
<a href="#feb-12-2020" class="md-nav__link">
Feb 12, 2020
</a>
</li>
<li class="md-nav__item">
<a href="#feb-6-2020" class="md-nav__link">
Feb 6, 2020
</a>
</li>
<li class="md-nav__item">
<a href="#feb-12-2020_1" class="md-nav__link">
Feb 1/2, 2020
</a>
</li>
<li class="md-nav__item">
<a href="#jan-31-2020" class="md-nav__link">
Jan 31, 2020
</a>
</li>
<li class="md-nav__item">
<a href="#jan-1112-2020" class="md-nav__link">
Jan 11/12, 2020
</a>
</li>
<li class="md-nav__item">
<a href="#jan-3-2020" class="md-nav__link">
Jan 3, 2020
</a>
</li>
<li class="md-nav__item">
<a href="#dec-30-2019" class="md-nav__link">
Dec 30, 2019
</a>
</li>
<li class="md-nav__item">
<a href="#dec-28-2019" class="md-nav__link">
Dec 28, 2019
</a>
</li>
<li class="md-nav__item">
<a href="#dec-23-2019" class="md-nav__link">
Dec 23, 2019
</a>
</li>
<li class="md-nav__item">
<a href="#dec-4-2019" class="md-nav__link">
Dec 4, 2019
</a>
</li>
<li class="md-nav__item">
<a href="#nov-29-2019" class="md-nav__link">
Nov 29, 2019
</a>
</li>
<li class="md-nav__item">
<a href="#nov-22-2019" class="md-nav__link">
Nov 22, 2019
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="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">
<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>
</span>
Table of contents
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="#feb-29-2020" class="md-nav__link">
Feb 29, 2020
</a>
</li>
<li class="md-nav__item">
<a href="#feb-18-2020" class="md-nav__link">
Feb 18, 2020
</a>
</li>
<li class="md-nav__item">
<a href="#feb-12-2020" class="md-nav__link">
Feb 12, 2020
</a>
</li>
<li class="md-nav__item">
<a href="#feb-6-2020" class="md-nav__link">
Feb 6, 2020
</a>
</li>
<li class="md-nav__item">
<a href="#feb-12-2020_1" class="md-nav__link">
Feb 1/2, 2020
</a>
</li>
<li class="md-nav__item">
<a href="#jan-31-2020" class="md-nav__link">
Jan 31, 2020
</a>
</li>
<li class="md-nav__item">
<a href="#jan-1112-2020" class="md-nav__link">
Jan 11/12, 2020
</a>
</li>
<li class="md-nav__item">
<a href="#jan-3-2020" class="md-nav__link">
Jan 3, 2020
</a>
</li>
<li class="md-nav__item">
<a href="#dec-30-2019" class="md-nav__link">
Dec 30, 2019
</a>
</li>
<li class="md-nav__item">
<a href="#dec-28-2019" class="md-nav__link">
Dec 28, 2019
</a>
</li>
<li class="md-nav__item">
<a href="#dec-23-2019" class="md-nav__link">
Dec 23, 2019
</a>
</li>
<li class="md-nav__item">
<a href="#dec-4-2019" class="md-nav__link">
Dec 4, 2019
</a>
</li>
<li class="md-nav__item">
<a href="#nov-29-2019" class="md-nav__link">
Nov 29, 2019
</a>
</li>
<li class="md-nav__item">
<a href="#nov-22-2019" class="md-nav__link">
Nov 22, 2019
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/rwightman/pytorch-image-models/edit/master/docs/archived_changes.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="archived-changes">Archived Changes</h1>
<h3 id="feb-29-2020">Feb 29, 2020</h3>
<ul>
<li>New MobileNet-V3 Large weights trained from stratch with this code to 75.77% top-1</li>
<li>IMPORTANT CHANGE - default weight init changed for all MobilenetV3 / EfficientNet / related models</li>
<li>overall results similar to a bit better training from scratch on a few smaller models tried</li>
<li>performance early in training seems consistently improved but less difference by end</li>
<li>set <code>fix_group_fanout=False</code> in <code>_init_weight_goog</code> fn if you need to reproducte past behaviour</li>
<li>Experimental LR noise feature added applies a random perturbation to LR each epoch in specified range of training</li>
</ul>
<h3 id="feb-18-2020">Feb 18, 2020</h3>
<ul>
<li>Big refactor of model layers and addition of several attention mechanisms. Several additions motivated by 'Compounding the Performance Improvements...' (<a href="https://arxiv.org/abs/2001.06268">https://arxiv.org/abs/2001.06268</a>):</li>
<li>Move layer/module impl into <code>layers</code> subfolder/module of <code>models</code> and organize in a more granular fashion</li>
<li>ResNet downsample paths now properly support dilation (output stride != 32) for avg_pool ('D' variant) and 3x3 (SENets) networks</li>
<li>Add Selective Kernel Nets on top of ResNet base, pretrained weights<ul>
<li>skresnet18 - 73% top-1</li>
<li>skresnet34 - 76.9% top-1 </li>
<li>skresnext50_32x4d (equiv to SKNet50) - 80.2% top-1</li>
</ul>
</li>
<li>ECA and CECA (circular padding) attention layer contributed by <a href="https://github.com/VRandme">Chris Ha</a></li>
<li>CBAM attention experiment (not the best results so far, may remove)</li>
<li>Attention factory to allow dynamically selecting one of SE, ECA, CBAM in the <code>.se</code> position for all ResNets</li>
<li>Add DropBlock and DropPath (formerly DropConnect for EfficientNet/MobileNetv3) support to all ResNet variants</li>
<li>Full dataset results updated that incl NoisyStudent weights and 2 of the 3 SK weights</li>
</ul>
<h3 id="feb-12-2020">Feb 12, 2020</h3>
<ul>
<li>Add EfficientNet-L2 and B0-B7 NoisyStudent weights ported from <a href="https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet">Tensorflow TPU</a></li>
</ul>
<h3 id="feb-6-2020">Feb 6, 2020</h3>
<ul>
<li>Add RandAugment trained EfficientNet-ES (EdgeTPU-Small) weights with 78.1 top-1. Trained by <a href="https://github.com/andravin">Andrew Lavin</a> (see Training section for hparams)</li>
</ul>
<h3 id="feb-12-2020_1">Feb &frac12;, 2020</h3>
<ul>
<li>Port new EfficientNet-B8 (RandAugment) weights, these are different than the B8 AdvProp, different input normalization.</li>
<li>Update results csv files on all models for ImageNet validation and three other test sets</li>
<li>Push PyPi package update</li>
</ul>
<h3 id="jan-31-2020">Jan 31, 2020</h3>
<ul>
<li>Update ResNet50 weights with a new 79.038 result from further JSD / AugMix experiments. Full command line for reproduction in training section below.</li>
</ul>
<h3 id="jan-1112-2020">Jan 11/12, 2020</h3>
<ul>
<li>Master may be a bit unstable wrt to training, these changes have been tested but not all combos</li>
<li>Implementations of AugMix added to existing RA and AA. Including numerous supporting pieces like JSD loss (Jensen-Shannon divergence + CE), and AugMixDataset</li>
<li>SplitBatchNorm adaptation layer added for implementing Auxiliary BN as per AdvProp paper</li>
<li>ResNet-50 AugMix trained model w/ 79% top-1 added</li>
<li><code>seresnext26tn_32x4d</code> - 77.99 top-1, 93.75 top-5 added to tiered experiment, higher img/s than 't' and 'd'</li>
</ul>
<h3 id="jan-3-2020">Jan 3, 2020</h3>
<ul>
<li>Add RandAugment trained EfficientNet-B0 weight with 77.7 top-1. Trained by <a href="https://github.com/michaelklachko">Michael Klachko</a> with this code and recent hparams (see Training section)</li>
<li>Add <code>avg_checkpoints.py</code> script for post training weight averaging and update all scripts with header docstrings and shebangs.</li>
</ul>
<h3 id="dec-30-2019">Dec 30, 2019</h3>
<ul>
<li>Merge <a href="https://github.com/mehtadushy">Dushyant Mehta's</a> PR for SelecSLS (Selective Short and Long Range Skip Connections) networks. Good GPU memory consumption and throughput. Original: <a href="https://github.com/mehtadushy/SelecSLS-Pytorch">https://github.com/mehtadushy/SelecSLS-Pytorch</a></li>
</ul>
<h3 id="dec-28-2019">Dec 28, 2019</h3>
<ul>
<li>Add new model weights and training hparams (see Training Hparams section)</li>
<li><code>efficientnet_b3</code> - 81.5 top-1, 95.7 top-5 at default res/crop, 81.9, 95.8 at 320x320 1.0 crop-pct<ul>
<li>trained with RandAugment, ended up with an interesting but less than perfect result (see training section)</li>
</ul>
</li>
<li><code>seresnext26d_32x4d</code>- 77.6 top-1, 93.6 top-5<ul>
<li>deep stem (32, 32, 64), avgpool downsample</li>
<li>stem/dowsample from bag-of-tricks paper</li>
</ul>
</li>
<li><code>seresnext26t_32x4d</code>- 78.0 top-1, 93.7 top-5<ul>
<li>deep tiered stem (24, 48, 64), avgpool downsample (a modified 'D' variant)</li>
<li>stem sizing mods from Jeremy Howard and fastai devs discussing ResNet architecture experiments</li>
</ul>
</li>
</ul>
<h3 id="dec-23-2019">Dec 23, 2019</h3>
<ul>
<li>Add RandAugment trained MixNet-XL weights with 80.48 top-1.</li>
<li><code>--dist-bn</code> argument added to train.py, will distribute BN stats between nodes after each train epoch, before eval</li>
</ul>
<h3 id="dec-4-2019">Dec 4, 2019</h3>
<ul>
<li>Added weights from the first training from scratch of an EfficientNet (B2) with my new RandAugment implementation. Much better than my previous B2 and very close to the official AdvProp ones (80.4 top-1, 95.08 top-5).</li>
</ul>
<h3 id="nov-29-2019">Nov 29, 2019</h3>
<ul>
<li>Brought EfficientNet and MobileNetV3 up to date with my <a href="https://github.com/rwightman/gen-efficientnet-pytorch">https://github.com/rwightman/gen-efficientnet-pytorch</a> code. Torchscript and ONNX export compat excluded.</li>
<li>AdvProp weights added</li>
<li>Official TF MobileNetv3 weights added</li>
<li>EfficientNet and MobileNetV3 hook based 'feature extraction' classes added. Will serve as basis for using models as backbones in obj detection/segmentation tasks. Lots more to be done here...</li>
<li>HRNet classification models and weights added from <a href="https://github.com/HRNet/HRNet-Image-Classification">https://github.com/HRNet/HRNet-Image-Classification</a></li>
<li>Consistency in global pooling, <code>reset_classifer</code>, and <code>forward_features</code> across models</li>
<li><code>forward_features</code> always returns unpooled feature maps now</li>
<li>Reasonable chance I broke something... let me know</li>
</ul>
<h3 id="nov-22-2019">Nov 22, 2019</h3>
<ul>
<li>Add ImageNet training RandAugment implementation alongside AutoAugment. PyTorch Transform compatible format, using PIL. Currently training two EfficientNet models from scratch with promising results... will update.</li>
<li><code>drop-connect</code> cmd line arg finally added to <code>train.py</code>, no need to hack model fns. Works for efficientnet/mobilenetv3 based models, ignored otherwise.</li>
</ul>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-nav">
<nav class="md-footer-nav__inner md-grid" aria-label="Footer">
<a href="../changes/" title="Recent Changes" class="md-footer-nav__link md-footer-nav__link--prev" rel="prev">
<div class="md-footer-nav__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-nav__title">
<div class="md-ellipsis">
<span class="md-footer-nav__direction">
Previous
</span>
Recent Changes
</div>
</div>
</a>
</nav>
</div>
<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>
<script src="../assets/javascripts/vendor.d710d30a.min.js"></script>
<script src="../assets/javascripts/bundle.b39636ac.min.js"></script><script id="__lang" type="application/json">{"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents"}</script>
<script>
app = initialize({
base: "..",
features: [],
search: Object.assign({
worker: "../assets/javascripts/worker/search.a68abb33.min.js"
}, typeof search !== "undefined" && search)
})
</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>