gh-pages
KaiyangZhou 2019-05-24 16:30:24 +01:00
parent 819e04956b
commit dd5e2ca166
76 changed files with 835 additions and 760 deletions

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Awesome-ReID &mdash; torchreid 0.7.6 documentation</title>
<title>Awesome-ReID &mdash; torchreid 0.7.7 documentation</title>
@ -61,7 +61,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Model Zoo &mdash; torchreid 0.7.6 documentation</title>
<title>Model Zoo &mdash; torchreid 0.7.7 documentation</title>
@ -60,7 +60,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Overview: module code &mdash; torchreid 0.7.6 documentation</title>
<title>Overview: module code &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>
@ -204,9 +204,9 @@
<li><a href="torchreid/models/pcb.html">torchreid.models.pcb</a></li>
<li><a href="torchreid/models/resnet.html">torchreid.models.resnet</a></li>
<li><a href="torchreid/models/resnetmid.html">torchreid.models.resnetmid</a></li>
<li><a href="torchreid/models/resnext.html">torchreid.models.resnext</a></li>
<li><a href="torchreid/models/senet.html">torchreid.models.senet</a></li>
<li><a href="torchreid/models/shufflenet.html">torchreid.models.shufflenet</a></li>
<li><a href="torchreid/models/shufflenetv2.html">torchreid.models.shufflenetv2</a></li>
<li><a href="torchreid/models/squeezenet.html">torchreid.models.squeezenet</a></li>
<li><a href="torchreid/models/xception.html">torchreid.models.xception</a></li>
<li><a href="torchreid/optim/lr_scheduler.html">torchreid.optim.lr_scheduler</a></li>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.data.datamanager &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.data.datamanager &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.data.datasets.__init__ &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.data.datasets.__init__ &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.data.datasets.dataset &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.data.datasets.dataset &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.data.datasets.image.cuhk01 &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.data.datasets.image.cuhk01 &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.data.datasets.image.cuhk03 &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.data.datasets.image.cuhk03 &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.data.datasets.image.dukemtmcreid &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.data.datasets.image.dukemtmcreid &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.data.datasets.image.grid &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.data.datasets.image.grid &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.data.datasets.image.ilids &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.data.datasets.image.ilids &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.data.datasets.image.market1501 &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.data.datasets.image.market1501 &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.data.datasets.image.msmt17 &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.data.datasets.image.msmt17 &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.data.datasets.image.prid &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.data.datasets.image.prid &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.data.datasets.image.sensereid &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.data.datasets.image.sensereid &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.data.datasets.image.viper &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.data.datasets.image.viper &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.data.datasets.video.dukemtmcvidreid &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.data.datasets.video.dukemtmcvidreid &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.data.datasets.video.ilidsvid &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.data.datasets.video.ilidsvid &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.data.datasets.video.mars &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.data.datasets.video.mars &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.data.datasets.video.prid2011 &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.data.datasets.video.prid2011 &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.data.sampler &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.data.sampler &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.data.transforms &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.data.transforms &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.engine.engine &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.engine.engine &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>
@ -219,7 +219,7 @@
<span class="sd"> max_epoch (int): maximum epoch.</span>
<span class="sd"> start_epoch (int, optional): starting epoch. Default is 0.</span>
<span class="sd"> fixbase_epoch (int, optional): number of epochs to train ``open_layers`` (new layers)</span>
<span class="sd"> while keeping base layers frozen. Default is 0. ``fixbase_epoch`` is not counted</span>
<span class="sd"> while keeping base layers frozen. Default is 0. ``fixbase_epoch`` is counted</span>
<span class="sd"> in ``max_epoch``.</span>
<span class="sd"> open_layers (str or list, optional): layers (attribute names) open for training.</span>
<span class="sd"> start_eval (int, optional): from which epoch to start evaluation. Default is 0.</span>
@ -263,15 +263,8 @@
<span class="n">time_start</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;=&gt; Start training&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">fixbase_epoch</span><span class="o">&gt;</span><span class="mi">0</span> <span class="ow">and</span> <span class="p">(</span><span class="n">open_layers</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">):</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Pretrain open layers (</span><span class="si">{}</span><span class="s1">) for </span><span class="si">{}</span><span class="s1"> epochs&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">open_layers</span><span class="p">,</span> <span class="n">fixbase_epoch</span><span class="p">))</span>
<span class="k">for</span> <span class="n">epoch</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">fixbase_epoch</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">train</span><span class="p">(</span><span class="n">epoch</span><span class="p">,</span> <span class="n">trainloader</span><span class="p">,</span> <span class="n">fixbase</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">open_layers</span><span class="o">=</span><span class="n">open_layers</span><span class="p">,</span>
<span class="n">print_freq</span><span class="o">=</span><span class="n">print_freq</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Done. From now on all layers are open to train for </span><span class="si">{}</span><span class="s1"> epochs&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">max_epoch</span><span class="p">))</span>
<span class="k">for</span> <span class="n">epoch</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">start_epoch</span><span class="p">,</span> <span class="n">max_epoch</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">train</span><span class="p">(</span><span class="n">epoch</span><span class="p">,</span> <span class="n">trainloader</span><span class="p">,</span> <span class="n">print_freq</span><span class="o">=</span><span class="n">print_freq</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">train</span><span class="p">(</span><span class="n">epoch</span><span class="p">,</span> <span class="n">max_epoch</span><span class="p">,</span> <span class="n">trainloader</span><span class="p">,</span> <span class="n">fixbase_epoch</span><span class="p">,</span> <span class="n">open_layers</span><span class="p">,</span> <span class="n">print_freq</span><span class="p">)</span>
<span class="k">if</span> <span class="p">(</span><span class="n">epoch</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">&gt;</span><span class="n">start_eval</span> <span class="ow">and</span> <span class="n">eval_freq</span><span class="o">&gt;</span><span class="mi">0</span> <span class="ow">and</span> <span class="p">(</span><span class="n">epoch</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">%</span><span class="n">eval_freq</span><span class="o">==</span><span class="mi">0</span> <span class="ow">and</span> <span class="p">(</span><span class="n">epoch</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">!=</span><span class="n">max_epoch</span><span class="p">:</span>
<span class="n">rank1</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">test</span><span class="p">(</span>
@ -362,7 +355,7 @@
<span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">targets</span><span class="p">:</span>
<span class="n">domain</span> <span class="o">=</span> <span class="s1">&#39;source&#39;</span> <span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">datamanager</span><span class="o">.</span><span class="n">sources</span> <span class="k">else</span> <span class="s1">&#39;target&#39;</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">##### Evaluating </span><span class="si">{}</span><span class="s1"> (</span><span class="si">{}</span><span class="s1">) #####&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">domain</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;##### Evaluating </span><span class="si">{}</span><span class="s1"> (</span><span class="si">{}</span><span class="s1">) #####&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">domain</span><span class="p">))</span>
<span class="n">queryloader</span> <span class="o">=</span> <span class="n">testloader</span><span class="p">[</span><span class="n">name</span><span class="p">][</span><span class="s1">&#39;query&#39;</span><span class="p">]</span>
<span class="n">galleryloader</span> <span class="o">=</span> <span class="n">testloader</span><span class="p">[</span><span class="n">name</span><span class="p">][</span><span class="s1">&#39;gallery&#39;</span><span class="p">]</span>
<span class="n">rank1</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_evaluate</span><span class="p">(</span>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.engine.image.softmax &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.engine.image.softmax &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>
@ -182,7 +182,7 @@
<div class="viewcode-block" id="ImageSoftmaxEngine"><a class="viewcode-back" href="../../../../pkg/engine.html#torchreid.engine.image.softmax.ImageSoftmaxEngine">[docs]</a><span class="k">class</span> <span class="nc">ImageSoftmaxEngine</span><span class="p">(</span><span class="n">engine</span><span class="o">.</span><span class="n">Engine</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Softmax-loss engine for image-reid.</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Softmax-loss engine for image-reid.</span>
<span class="sd"> Args:</span>
<span class="sd"> datamanager (DataManager): an instance of ``torchreid.data.ImageDataManager``</span>
@ -239,24 +239,15 @@
<span class="n">label_smooth</span><span class="o">=</span><span class="n">label_smooth</span>
<span class="p">)</span>
<div class="viewcode-block" id="ImageSoftmaxEngine.train"><a class="viewcode-back" href="../../../../pkg/engine.html#torchreid.engine.image.softmax.ImageSoftmaxEngine.train">[docs]</a> <span class="k">def</span> <span class="nf">train</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">epoch</span><span class="p">,</span> <span class="n">trainloader</span><span class="p">,</span> <span class="n">fixbase</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">open_layers</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">print_freq</span><span class="o">=</span><span class="mi">10</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Trains the model for one epoch on source datasets using softmax loss.</span>
<span class="sd"> Args:</span>
<span class="sd"> epoch (int): current epoch.</span>
<span class="sd"> trainloader (Dataloader): training dataloader.</span>
<span class="sd"> fixbase (bool, optional): whether to fix base layers. Default is False.</span>
<span class="sd"> open_layers (str or list, optional): layers open for training.</span>
<span class="sd"> print_freq (int, optional): print frequency. Default is 10.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<div class="viewcode-block" id="ImageSoftmaxEngine.train"><a class="viewcode-back" href="../../../../pkg/engine.html#torchreid.engine.image.softmax.ImageSoftmaxEngine.train">[docs]</a> <span class="k">def</span> <span class="nf">train</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">epoch</span><span class="p">,</span> <span class="n">max_epoch</span><span class="p">,</span> <span class="n">trainloader</span><span class="p">,</span> <span class="n">fixbase_epoch</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">open_layers</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">print_freq</span><span class="o">=</span><span class="mi">10</span><span class="p">):</span>
<span class="n">losses</span> <span class="o">=</span> <span class="n">AverageMeter</span><span class="p">()</span>
<span class="n">accs</span> <span class="o">=</span> <span class="n">AverageMeter</span><span class="p">()</span>
<span class="n">batch_time</span> <span class="o">=</span> <span class="n">AverageMeter</span><span class="p">()</span>
<span class="n">data_time</span> <span class="o">=</span> <span class="n">AverageMeter</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">train</span><span class="p">()</span>
<span class="k">if</span> <span class="n">fixbase</span> <span class="ow">and</span> <span class="p">(</span><span class="n">open_layers</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="p">(</span><span class="n">epoch</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">&lt;=</span><span class="n">fixbase_epoch</span> <span class="ow">and</span> <span class="n">open_layers</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;* Only train </span><span class="si">{}</span><span class="s1"> (epoch: </span><span class="si">{}</span><span class="s1">/</span><span class="si">{}</span><span class="s1">)&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">open_layers</span><span class="p">,</span> <span class="n">epoch</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="n">fixbase_epoch</span><span class="p">))</span>
<span class="n">open_specified_layers</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">,</span> <span class="n">open_layers</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">open_all_layers</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">)</span>
@ -282,20 +273,30 @@
<span class="n">accs</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">metrics</span><span class="o">.</span><span class="n">accuracy</span><span class="p">(</span><span class="n">outputs</span><span class="p">,</span> <span class="n">pids</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">item</span><span class="p">())</span>
<span class="k">if</span> <span class="p">(</span><span class="n">batch_idx</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="n">print_freq</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Epoch: [</span><span class="si">{0}</span><span class="s1">][</span><span class="si">{1}</span><span class="s1">/</span><span class="si">{2}</span><span class="s1">]</span><span class="se">\t</span><span class="s1">&#39;</span>
<span class="c1"># estimate remaining time</span>
<span class="n">num_batches</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">trainloader</span><span class="p">)</span>
<span class="n">eta_seconds</span> <span class="o">=</span> <span class="n">batch_time</span><span class="o">.</span><span class="n">avg</span> <span class="o">*</span> <span class="p">(</span><span class="n">num_batches</span><span class="o">-</span><span class="p">(</span><span class="n">batch_idx</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> <span class="o">+</span> <span class="p">(</span><span class="n">max_epoch</span><span class="o">-</span><span class="p">(</span><span class="n">epoch</span><span class="o">+</span><span class="mi">1</span><span class="p">))</span><span class="o">*</span><span class="n">num_batches</span><span class="p">)</span>
<span class="n">eta_str</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">seconds</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">eta_seconds</span><span class="p">)))</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Epoch: [</span><span class="si">{0}</span><span class="s1">/</span><span class="si">{1}</span><span class="s1">][</span><span class="si">{2}</span><span class="s1">/</span><span class="si">{3}</span><span class="s1">]</span><span class="se">\t</span><span class="s1">&#39;</span>
<span class="s1">&#39;Time </span><span class="si">{batch_time.val:.3f}</span><span class="s1"> (</span><span class="si">{batch_time.avg:.3f}</span><span class="s1">)</span><span class="se">\t</span><span class="s1">&#39;</span>
<span class="s1">&#39;Data </span><span class="si">{data_time.val:.3f}</span><span class="s1"> (</span><span class="si">{data_time.avg:.3f}</span><span class="s1">)</span><span class="se">\t</span><span class="s1">&#39;</span>
<span class="s1">&#39;Loss </span><span class="si">{loss.val:.4f}</span><span class="s1"> (</span><span class="si">{loss.avg:.4f}</span><span class="s1">)</span><span class="se">\t</span><span class="s1">&#39;</span>
<span class="s1">&#39;Acc </span><span class="si">{acc.val:.2f}</span><span class="s1"> (</span><span class="si">{acc.avg:.2f}</span><span class="s1">)</span><span class="se">\t</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">epoch</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">batch_idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">trainloader</span><span class="p">),</span>
<span class="s1">&#39;Acc </span><span class="si">{acc.val:.2f}</span><span class="s1"> (</span><span class="si">{acc.avg:.2f}</span><span class="s1">)</span><span class="se">\t</span><span class="s1">&#39;</span>
<span class="s1">&#39;Lr </span><span class="si">{lr:.6f}</span><span class="se">\t</span><span class="s1">&#39;</span>
<span class="s1">&#39;Eta </span><span class="si">{eta}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">epoch</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="n">max_epoch</span><span class="p">,</span> <span class="n">batch_idx</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">trainloader</span><span class="p">),</span>
<span class="n">batch_time</span><span class="o">=</span><span class="n">batch_time</span><span class="p">,</span>
<span class="n">data_time</span><span class="o">=</span><span class="n">data_time</span><span class="p">,</span>
<span class="n">loss</span><span class="o">=</span><span class="n">losses</span><span class="p">,</span>
<span class="n">acc</span><span class="o">=</span><span class="n">accs</span><span class="p">))</span>
<span class="n">acc</span><span class="o">=</span><span class="n">accs</span><span class="p">,</span>
<span class="n">lr</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">optimizer</span><span class="o">.</span><span class="n">param_groups</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s1">&#39;lr&#39;</span><span class="p">],</span>
<span class="n">eta</span><span class="o">=</span><span class="n">eta_str</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="n">end</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
<span class="k">if</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">scheduler</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="n">fixbase</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">scheduler</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">scheduler</span><span class="o">.</span><span class="n">step</span><span class="p">()</span></div></div>
</pre></div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.engine.image.triplet &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.engine.image.triplet &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>
@ -182,7 +182,7 @@
<div class="viewcode-block" id="ImageTripletEngine"><a class="viewcode-back" href="../../../../pkg/engine.html#torchreid.engine.image.triplet.ImageTripletEngine">[docs]</a><span class="k">class</span> <span class="nc">ImageTripletEngine</span><span class="p">(</span><span class="n">engine</span><span class="o">.</span><span class="n">Engine</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Triplet-loss engine for image-reid.</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Triplet-loss engine for image-reid.</span>
<span class="sd"> Args:</span>
<span class="sd"> datamanager (DataManager): an instance of ``torchreid.data.ImageDataManager``</span>
@ -250,16 +250,7 @@
<span class="n">label_smooth</span><span class="o">=</span><span class="n">label_smooth</span>
<span class="p">)</span>
<div class="viewcode-block" id="ImageTripletEngine.train"><a class="viewcode-back" href="../../../../pkg/engine.html#torchreid.engine.image.triplet.ImageTripletEngine.train">[docs]</a> <span class="k">def</span> <span class="nf">train</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">epoch</span><span class="p">,</span> <span class="n">trainloader</span><span class="p">,</span> <span class="n">fixbase</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">open_layers</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">print_freq</span><span class="o">=</span><span class="mi">10</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Trains the model for one epoch on source datasets using hard mining triplet loss.</span>
<span class="sd"> Args:</span>
<span class="sd"> epoch (int): current epoch.</span>
<span class="sd"> trainloader (Dataloader): training dataloader.</span>
<span class="sd"> fixbase (bool, optional): whether to fix base layers. Default is False.</span>
<span class="sd"> open_layers (str or list, optional): layers open for training.</span>
<span class="sd"> print_freq (int, optional): print frequency. Default is 10.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<div class="viewcode-block" id="ImageTripletEngine.train"><a class="viewcode-back" href="../../../../pkg/engine.html#torchreid.engine.image.triplet.ImageTripletEngine.train">[docs]</a> <span class="k">def</span> <span class="nf">train</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">epoch</span><span class="p">,</span> <span class="n">max_epoch</span><span class="p">,</span> <span class="n">trainloader</span><span class="p">,</span> <span class="n">fixbase_epoch</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">open_layers</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">print_freq</span><span class="o">=</span><span class="mi">10</span><span class="p">):</span>
<span class="n">losses_t</span> <span class="o">=</span> <span class="n">AverageMeter</span><span class="p">()</span>
<span class="n">losses_x</span> <span class="o">=</span> <span class="n">AverageMeter</span><span class="p">()</span>
<span class="n">accs</span> <span class="o">=</span> <span class="n">AverageMeter</span><span class="p">()</span>
@ -267,8 +258,8 @@
<span class="n">data_time</span> <span class="o">=</span> <span class="n">AverageMeter</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">train</span><span class="p">()</span>
<span class="k">if</span> <span class="n">fixbase</span> <span class="ow">and</span> <span class="p">(</span><span class="n">open_layers</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="p">(</span><span class="n">epoch</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">&lt;=</span><span class="n">fixbase_epoch</span> <span class="ow">and</span> <span class="n">open_layers</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;* Only train </span><span class="si">{}</span><span class="s1"> (epoch: </span><span class="si">{}</span><span class="s1">/</span><span class="si">{}</span><span class="s1">)&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">open_layers</span><span class="p">,</span> <span class="n">epoch</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="n">fixbase_epoch</span><span class="p">))</span>
<span class="n">open_specified_layers</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">,</span> <span class="n">open_layers</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">open_all_layers</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">)</span>
@ -297,22 +288,32 @@
<span class="n">accs</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">metrics</span><span class="o">.</span><span class="n">accuracy</span><span class="p">(</span><span class="n">outputs</span><span class="p">,</span> <span class="n">pids</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">item</span><span class="p">())</span>
<span class="k">if</span> <span class="p">(</span><span class="n">batch_idx</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="n">print_freq</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Epoch: [</span><span class="si">{0}</span><span class="s1">][</span><span class="si">{1}</span><span class="s1">/</span><span class="si">{2}</span><span class="s1">]</span><span class="se">\t</span><span class="s1">&#39;</span>
<span class="c1"># estimate remaining time</span>
<span class="n">num_batches</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">trainloader</span><span class="p">)</span>
<span class="n">eta_seconds</span> <span class="o">=</span> <span class="n">batch_time</span><span class="o">.</span><span class="n">avg</span> <span class="o">*</span> <span class="p">(</span><span class="n">num_batches</span><span class="o">-</span><span class="p">(</span><span class="n">batch_idx</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> <span class="o">+</span> <span class="p">(</span><span class="n">max_epoch</span><span class="o">-</span><span class="p">(</span><span class="n">epoch</span><span class="o">+</span><span class="mi">1</span><span class="p">))</span><span class="o">*</span><span class="n">num_batches</span><span class="p">)</span>
<span class="n">eta_str</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">seconds</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">eta_seconds</span><span class="p">)))</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Epoch: [</span><span class="si">{0}</span><span class="s1">/</span><span class="si">{1}</span><span class="s1">][</span><span class="si">{2}</span><span class="s1">/</span><span class="si">{3}</span><span class="s1">]</span><span class="se">\t</span><span class="s1">&#39;</span>
<span class="s1">&#39;Time </span><span class="si">{batch_time.val:.3f}</span><span class="s1"> (</span><span class="si">{batch_time.avg:.3f}</span><span class="s1">)</span><span class="se">\t</span><span class="s1">&#39;</span>
<span class="s1">&#39;Data </span><span class="si">{data_time.val:.3f}</span><span class="s1"> (</span><span class="si">{data_time.avg:.3f}</span><span class="s1">)</span><span class="se">\t</span><span class="s1">&#39;</span>
<span class="s1">&#39;Triplet </span><span class="si">{loss_t.val:.4f}</span><span class="s1"> (</span><span class="si">{loss_t.avg:.4f}</span><span class="s1">)</span><span class="se">\t</span><span class="s1">&#39;</span>
<span class="s1">&#39;Softmax </span><span class="si">{loss_x.val:.4f}</span><span class="s1"> (</span><span class="si">{loss_x.avg:.4f}</span><span class="s1">)</span><span class="se">\t</span><span class="s1">&#39;</span>
<span class="s1">&#39;Acc </span><span class="si">{acc.val:.2f}</span><span class="s1"> (</span><span class="si">{acc.avg:.2f}</span><span class="s1">)</span><span class="se">\t</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">epoch</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">batch_idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">trainloader</span><span class="p">),</span>
<span class="s1">&#39;Loss_t </span><span class="si">{loss_t.val:.4f}</span><span class="s1"> (</span><span class="si">{loss_t.avg:.4f}</span><span class="s1">)</span><span class="se">\t</span><span class="s1">&#39;</span>
<span class="s1">&#39;Loss_x </span><span class="si">{loss_x.val:.4f}</span><span class="s1"> (</span><span class="si">{loss_x.avg:.4f}</span><span class="s1">)</span><span class="se">\t</span><span class="s1">&#39;</span>
<span class="s1">&#39;Acc </span><span class="si">{acc.val:.2f}</span><span class="s1"> (</span><span class="si">{acc.avg:.2f}</span><span class="s1">)</span><span class="se">\t</span><span class="s1">&#39;</span>
<span class="s1">&#39;Lr </span><span class="si">{lr:.6f}</span><span class="se">\t</span><span class="s1">&#39;</span>
<span class="s1">&#39;Eta </span><span class="si">{eta}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">epoch</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="n">max_epoch</span><span class="p">,</span> <span class="n">batch_idx</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">trainloader</span><span class="p">),</span>
<span class="n">batch_time</span><span class="o">=</span><span class="n">batch_time</span><span class="p">,</span>
<span class="n">data_time</span><span class="o">=</span><span class="n">data_time</span><span class="p">,</span>
<span class="n">loss_t</span><span class="o">=</span><span class="n">losses_t</span><span class="p">,</span>
<span class="n">loss_x</span><span class="o">=</span><span class="n">losses_x</span><span class="p">,</span>
<span class="n">acc</span><span class="o">=</span><span class="n">accs</span><span class="p">))</span>
<span class="n">acc</span><span class="o">=</span><span class="n">accs</span><span class="p">,</span>
<span class="n">lr</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">optimizer</span><span class="o">.</span><span class="n">param_groups</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s1">&#39;lr&#39;</span><span class="p">],</span>
<span class="n">eta</span><span class="o">=</span><span class="n">eta_str</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="n">end</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
<span class="k">if</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">scheduler</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="n">fixbase</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">scheduler</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">scheduler</span><span class="o">.</span><span class="n">step</span><span class="p">()</span></div></div>
</pre></div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.engine.video.softmax &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.engine.video.softmax &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.engine.video.triplet &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.engine.video.triplet &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.losses.cross_entropy_loss &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.losses.cross_entropy_loss &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.losses.hard_mine_triplet_loss &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.losses.hard_mine_triplet_loss &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.metrics.accuracy &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.metrics.accuracy &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.metrics.distance &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.metrics.distance &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.metrics.rank &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.metrics.rank &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.models.__init__ &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.models.__init__ &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>
@ -171,7 +171,6 @@
<span class="kn">from</span> <span class="nn">.resnet</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">.resnetmid</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">.resnext</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">.senet</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">.densenet</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">.inceptionresnetv2</span> <span class="k">import</span> <span class="o">*</span>
@ -182,6 +181,7 @@
<span class="kn">from</span> <span class="nn">.mobilenetv2</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">.shufflenet</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">.squeezenet</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">.shufflenetv2</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">.mudeep</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">.hacnn</span> <span class="k">import</span> <span class="o">*</span>
@ -196,9 +196,9 @@
<span class="s1">&#39;resnet50&#39;</span><span class="p">:</span> <span class="n">resnet50</span><span class="p">,</span>
<span class="s1">&#39;resnet101&#39;</span><span class="p">:</span> <span class="n">resnet101</span><span class="p">,</span>
<span class="s1">&#39;resnet152&#39;</span><span class="p">:</span> <span class="n">resnet152</span><span class="p">,</span>
<span class="s1">&#39;resnet50_fc512&#39;</span><span class="p">:</span> <span class="n">resnet50_fc512</span><span class="p">,</span>
<span class="s1">&#39;resnext50_32x4d&#39;</span><span class="p">:</span> <span class="n">resnext50_32x4d</span><span class="p">,</span>
<span class="s1">&#39;resnext50_32x4d_fc512&#39;</span><span class="p">:</span> <span class="n">resnext50_32x4d_fc512</span><span class="p">,</span>
<span class="s1">&#39;resnext101_32x8d&#39;</span><span class="p">:</span> <span class="n">resnext101_32x8d</span><span class="p">,</span>
<span class="s1">&#39;resnet50_fc512&#39;</span><span class="p">:</span> <span class="n">resnet50_fc512</span><span class="p">,</span>
<span class="s1">&#39;se_resnet50&#39;</span><span class="p">:</span> <span class="n">se_resnet50</span><span class="p">,</span>
<span class="s1">&#39;se_resnet50_fc512&#39;</span><span class="p">:</span> <span class="n">se_resnet50_fc512</span><span class="p">,</span>
<span class="s1">&#39;se_resnet101&#39;</span><span class="p">:</span> <span class="n">se_resnet101</span><span class="p">,</span>
@ -220,6 +220,10 @@
<span class="s1">&#39;squeezenet1_0&#39;</span><span class="p">:</span> <span class="n">squeezenet1_0</span><span class="p">,</span>
<span class="s1">&#39;squeezenet1_0_fc512&#39;</span><span class="p">:</span> <span class="n">squeezenet1_0_fc512</span><span class="p">,</span>
<span class="s1">&#39;squeezenet1_1&#39;</span><span class="p">:</span> <span class="n">squeezenet1_1</span><span class="p">,</span>
<span class="s1">&#39;shufflenet_v2_x0_5&#39;</span><span class="p">:</span> <span class="n">shufflenet_v2_x0_5</span><span class="p">,</span>
<span class="s1">&#39;shufflenet_v2_x1_0&#39;</span><span class="p">:</span> <span class="n">shufflenet_v2_x1_0</span><span class="p">,</span>
<span class="s1">&#39;shufflenet_v2_x1_5&#39;</span><span class="p">:</span> <span class="n">shufflenet_v2_x1_5</span><span class="p">,</span>
<span class="s1">&#39;shufflenet_v2_x2_0&#39;</span><span class="p">:</span> <span class="n">shufflenet_v2_x2_0</span><span class="p">,</span>
<span class="c1"># reid-specific models</span>
<span class="s1">&#39;mudeep&#39;</span><span class="p">:</span> <span class="n">MuDeep</span><span class="p">,</span>
<span class="s1">&#39;resnet50mid&#39;</span><span class="p">:</span> <span class="n">resnet50mid</span><span class="p">,</span>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.models.densenet &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.models.densenet &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>
@ -165,7 +165,10 @@
<div itemprop="articleBody">
<h1>Source code for torchreid.models.densenet</h1><div class="highlight"><pre>
<span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">absolute_import</span>
<span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Code source: https://github.com/pytorch/vision</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">absolute_import</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">division</span>
<span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;densenet121&#39;</span><span class="p">,</span> <span class="s1">&#39;densenet169&#39;</span><span class="p">,</span> <span class="s1">&#39;densenet201&#39;</span><span class="p">,</span> <span class="s1">&#39;densenet161&#39;</span><span class="p">,</span> <span class="s1">&#39;densenet121_fc512&#39;</span><span class="p">]</span>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.models.hacnn &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.models.hacnn &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.models.inceptionresnetv2 &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.models.inceptionresnetv2 &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.models.inceptionv4 &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.models.inceptionv4 &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.models.mlfn &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.models.mlfn &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.models.mobilenetv2 &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.models.mobilenetv2 &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.models.mudeep &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.models.mudeep &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.models.nasnet &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.models.nasnet &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.models.pcb &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.models.pcb &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.models.resnet &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.models.resnet &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>
@ -165,10 +165,14 @@
<div itemprop="articleBody">
<h1>Source code for torchreid.models.resnet</h1><div class="highlight"><pre>
<span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">absolute_import</span>
<span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Code source: https://github.com/pytorch/vision</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">absolute_import</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">division</span>
<span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;resnet18&#39;</span><span class="p">,</span> <span class="s1">&#39;resnet34&#39;</span><span class="p">,</span> <span class="s1">&#39;resnet50&#39;</span><span class="p">,</span> <span class="s1">&#39;resnet101&#39;</span><span class="p">,</span> <span class="s1">&#39;resnet152&#39;</span><span class="p">,</span> <span class="s1">&#39;resnet50_fc512&#39;</span><span class="p">]</span>
<span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;resnet18&#39;</span><span class="p">,</span> <span class="s1">&#39;resnet34&#39;</span><span class="p">,</span> <span class="s1">&#39;resnet50&#39;</span><span class="p">,</span> <span class="s1">&#39;resnet101&#39;</span><span class="p">,</span> <span class="s1">&#39;resnet152&#39;</span><span class="p">,</span> <span class="s1">&#39;resnext50_32x4d&#39;</span><span class="p">,</span>
<span class="s1">&#39;resnext101_32x8d&#39;</span><span class="p">,</span> <span class="s1">&#39;resnet50_fc512&#39;</span><span class="p">]</span>
<span class="kn">import</span> <span class="nn">torch</span>
<span class="kn">from</span> <span class="nn">torch</span> <span class="k">import</span> <span class="n">nn</span>
@ -183,30 +187,45 @@
<span class="s1">&#39;resnet50&#39;</span><span class="p">:</span> <span class="s1">&#39;https://download.pytorch.org/models/resnet50-19c8e357.pth&#39;</span><span class="p">,</span>
<span class="s1">&#39;resnet101&#39;</span><span class="p">:</span> <span class="s1">&#39;https://download.pytorch.org/models/resnet101-5d3b4d8f.pth&#39;</span><span class="p">,</span>
<span class="s1">&#39;resnet152&#39;</span><span class="p">:</span> <span class="s1">&#39;https://download.pytorch.org/models/resnet152-b121ed2d.pth&#39;</span><span class="p">,</span>
<span class="s1">&#39;resnext50_32x4d&#39;</span><span class="p">:</span> <span class="s1">&#39;https://download.pytorch.org/models/resnext50_32x4d-7cdf4587.pth&#39;</span><span class="p">,</span>
<span class="s1">&#39;resnext101_32x8d&#39;</span><span class="p">:</span> <span class="s1">&#39;https://download.pytorch.org/models/resnext101_32x8d-8ba56ff5.pth&#39;</span><span class="p">,</span>
<span class="p">}</span>
<span class="k">def</span> <span class="nf">conv3x3</span><span class="p">(</span><span class="n">in_planes</span><span class="p">,</span> <span class="n">out_planes</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">conv3x3</span><span class="p">(</span><span class="n">in_planes</span><span class="p">,</span> <span class="n">out_planes</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">groups</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">dilation</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;3x3 convolution with padding&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">(</span><span class="n">in_planes</span><span class="p">,</span> <span class="n">out_planes</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="n">stride</span><span class="p">,</span>
<span class="n">padding</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">bias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="n">padding</span><span class="o">=</span><span class="n">dilation</span><span class="p">,</span> <span class="n">groups</span><span class="o">=</span><span class="n">groups</span><span class="p">,</span> <span class="n">bias</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">dilation</span><span class="o">=</span><span class="n">dilation</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">conv1x1</span><span class="p">(</span><span class="n">in_planes</span><span class="p">,</span> <span class="n">out_planes</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;1x1 convolution&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">(</span><span class="n">in_planes</span><span class="p">,</span> <span class="n">out_planes</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="n">stride</span><span class="p">,</span> <span class="n">bias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">BasicBlock</span><span class="p">(</span><span class="n">nn</span><span class="o">.</span><span class="n">Module</span><span class="p">):</span>
<span class="n">expansion</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">inplanes</span><span class="p">,</span> <span class="n">planes</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">downsample</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">inplanes</span><span class="p">,</span> <span class="n">planes</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">downsample</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">groups</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
<span class="n">base_width</span><span class="o">=</span><span class="mi">64</span><span class="p">,</span> <span class="n">dilation</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">norm_layer</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">BasicBlock</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="k">if</span> <span class="n">norm_layer</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">norm_layer</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">BatchNorm2d</span>
<span class="k">if</span> <span class="n">groups</span> <span class="o">!=</span> <span class="mi">1</span> <span class="ow">or</span> <span class="n">base_width</span> <span class="o">!=</span> <span class="mi">64</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;BasicBlock only supports groups=1 and base_width=64&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">dilation</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Dilation &gt; 1 not supported in BasicBlock&quot;</span><span class="p">)</span>
<span class="c1"># Both self.conv1 and self.downsample layers downsample the input when stride != 1</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conv1</span> <span class="o">=</span> <span class="n">conv3x3</span><span class="p">(</span><span class="n">inplanes</span><span class="p">,</span> <span class="n">planes</span><span class="p">,</span> <span class="n">stride</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">bn1</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">BatchNorm2d</span><span class="p">(</span><span class="n">planes</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">bn1</span> <span class="o">=</span> <span class="n">norm_layer</span><span class="p">(</span><span class="n">planes</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">relu</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">ReLU</span><span class="p">(</span><span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conv2</span> <span class="o">=</span> <span class="n">conv3x3</span><span class="p">(</span><span class="n">planes</span><span class="p">,</span> <span class="n">planes</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">bn2</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">BatchNorm2d</span><span class="p">(</span><span class="n">planes</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">bn2</span> <span class="o">=</span> <span class="n">norm_layer</span><span class="p">(</span><span class="n">planes</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">downsample</span> <span class="o">=</span> <span class="n">downsample</span>
<span class="bp">self</span><span class="o">.</span><span class="n">stride</span> <span class="o">=</span> <span class="n">stride</span>
<span class="k">def</span> <span class="nf">forward</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
<span class="n">residual</span> <span class="o">=</span> <span class="n">x</span>
<span class="n">identity</span> <span class="o">=</span> <span class="n">x</span>
<span class="n">out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">conv1</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="n">out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">bn1</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
@ -216,9 +235,9 @@
<span class="n">out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">bn2</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">downsample</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">residual</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">downsample</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="n">identity</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">downsample</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="n">out</span> <span class="o">+=</span> <span class="n">residual</span>
<span class="n">out</span> <span class="o">+=</span> <span class="n">identity</span>
<span class="n">out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">relu</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
<span class="k">return</span> <span class="n">out</span>
@ -227,21 +246,25 @@
<span class="k">class</span> <span class="nc">Bottleneck</span><span class="p">(</span><span class="n">nn</span><span class="o">.</span><span class="n">Module</span><span class="p">):</span>
<span class="n">expansion</span> <span class="o">=</span> <span class="mi">4</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">inplanes</span><span class="p">,</span> <span class="n">planes</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">downsample</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">inplanes</span><span class="p">,</span> <span class="n">planes</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">downsample</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">groups</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
<span class="n">base_width</span><span class="o">=</span><span class="mi">64</span><span class="p">,</span> <span class="n">dilation</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">norm_layer</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">Bottleneck</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conv1</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">(</span><span class="n">inplanes</span><span class="p">,</span> <span class="n">planes</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">bias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">bn1</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">BatchNorm2d</span><span class="p">(</span><span class="n">planes</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conv2</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">(</span><span class="n">planes</span><span class="p">,</span> <span class="n">planes</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="n">stride</span><span class="p">,</span>
<span class="n">padding</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">bias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">bn2</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">BatchNorm2d</span><span class="p">(</span><span class="n">planes</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conv3</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">(</span><span class="n">planes</span><span class="p">,</span> <span class="n">planes</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">expansion</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">bias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">bn3</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">BatchNorm2d</span><span class="p">(</span><span class="n">planes</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">expansion</span><span class="p">)</span>
<span class="k">if</span> <span class="n">norm_layer</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">norm_layer</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">BatchNorm2d</span>
<span class="n">width</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">planes</span> <span class="o">*</span> <span class="p">(</span><span class="n">base_width</span> <span class="o">/</span> <span class="mf">64.</span><span class="p">))</span> <span class="o">*</span> <span class="n">groups</span>
<span class="c1"># Both self.conv2 and self.downsample layers downsample the input when stride != 1</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conv1</span> <span class="o">=</span> <span class="n">conv1x1</span><span class="p">(</span><span class="n">inplanes</span><span class="p">,</span> <span class="n">width</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">bn1</span> <span class="o">=</span> <span class="n">norm_layer</span><span class="p">(</span><span class="n">width</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conv2</span> <span class="o">=</span> <span class="n">conv3x3</span><span class="p">(</span><span class="n">width</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">stride</span><span class="p">,</span> <span class="n">groups</span><span class="p">,</span> <span class="n">dilation</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">bn2</span> <span class="o">=</span> <span class="n">norm_layer</span><span class="p">(</span><span class="n">width</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conv3</span> <span class="o">=</span> <span class="n">conv1x1</span><span class="p">(</span><span class="n">width</span><span class="p">,</span> <span class="n">planes</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">expansion</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">bn3</span> <span class="o">=</span> <span class="n">norm_layer</span><span class="p">(</span><span class="n">planes</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">expansion</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">relu</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">ReLU</span><span class="p">(</span><span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">downsample</span> <span class="o">=</span> <span class="n">downsample</span>
<span class="bp">self</span><span class="o">.</span><span class="n">stride</span> <span class="o">=</span> <span class="n">stride</span>
<span class="k">def</span> <span class="nf">forward</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
<span class="n">residual</span> <span class="o">=</span> <span class="n">x</span>
<span class="n">identity</span> <span class="o">=</span> <span class="n">x</span>
<span class="n">out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">conv1</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="n">out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">bn1</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
@ -255,9 +278,9 @@
<span class="n">out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">bn3</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">downsample</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">residual</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">downsample</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="n">identity</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">downsample</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="n">out</span> <span class="o">+=</span> <span class="n">residual</span>
<span class="n">out</span> <span class="o">+=</span> <span class="n">identity</span>
<span class="n">out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">relu</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
<span class="k">return</span> <span class="n">out</span>
@ -267,7 +290,8 @@
<span class="sd">&quot;&quot;&quot;Residual network.</span>
<span class="sd"> </span>
<span class="sd"> Reference:</span>
<span class="sd"> He et al. Deep Residual Learning for Image Recognition. CVPR 2016.</span>
<span class="sd"> - He et al. Deep Residual Learning for Image Recognition. CVPR 2016.</span>
<span class="sd"> - Xie et al. Aggregated Residual Transformations for Deep Neural Networks. CVPR 2017.</span>
<span class="sd"> Public keys:</span>
<span class="sd"> - ``resnet18``: ResNet18.</span>
@ -275,49 +299,80 @@
<span class="sd"> - ``resnet50``: ResNet50.</span>
<span class="sd"> - ``resnet101``: ResNet101.</span>
<span class="sd"> - ``resnet152``: ResNet152.</span>
<span class="sd"> - ``resnext50_32x4d``: ResNeXt50.</span>
<span class="sd"> - ``resnext101_32x8d``: ResNeXt101.</span>
<span class="sd"> - ``resnet50_fc512``: ResNet50 + FC.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">num_classes</span><span class="p">,</span> <span class="n">loss</span><span class="p">,</span> <span class="n">block</span><span class="p">,</span> <span class="n">layers</span><span class="p">,</span>
<span class="n">last_stride</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">fc_dims</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">dropout_p</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">inplanes</span> <span class="o">=</span> <span class="mi">64</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">num_classes</span><span class="p">,</span> <span class="n">loss</span><span class="p">,</span> <span class="n">block</span><span class="p">,</span> <span class="n">layers</span><span class="p">,</span> <span class="n">zero_init_residual</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">groups</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">width_per_group</span><span class="o">=</span><span class="mi">64</span><span class="p">,</span> <span class="n">replace_stride_with_dilation</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">norm_layer</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">last_stride</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">fc_dims</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dropout_p</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">ResNet</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="k">if</span> <span class="n">norm_layer</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">norm_layer</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">BatchNorm2d</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_norm_layer</span> <span class="o">=</span> <span class="n">norm_layer</span>
<span class="bp">self</span><span class="o">.</span><span class="n">loss</span> <span class="o">=</span> <span class="n">loss</span>
<span class="bp">self</span><span class="o">.</span><span class="n">feature_dim</span> <span class="o">=</span> <span class="mi">512</span> <span class="o">*</span> <span class="n">block</span><span class="o">.</span><span class="n">expansion</span>
<span class="c1"># backbone network</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conv1</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">64</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">7</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">padding</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">bias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">bn1</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">BatchNorm2d</span><span class="p">(</span><span class="mi">64</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">inplanes</span> <span class="o">=</span> <span class="mi">64</span>
<span class="bp">self</span><span class="o">.</span><span class="n">dilation</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">if</span> <span class="n">replace_stride_with_dilation</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="c1"># each element in the tuple indicates if we should replace</span>
<span class="c1"># the 2x2 stride with a dilated convolution instead</span>
<span class="n">replace_stride_with_dilation</span> <span class="o">=</span> <span class="p">[</span><span class="kc">False</span><span class="p">,</span> <span class="kc">False</span><span class="p">,</span> <span class="kc">False</span><span class="p">]</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">replace_stride_with_dilation</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">3</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;replace_stride_with_dilation should be None &quot;</span>
<span class="s2">&quot;or a 3-element tuple, got </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">replace_stride_with_dilation</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">groups</span> <span class="o">=</span> <span class="n">groups</span>
<span class="bp">self</span><span class="o">.</span><span class="n">base_width</span> <span class="o">=</span> <span class="n">width_per_group</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conv1</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">inplanes</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">7</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">padding</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span>
<span class="n">bias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">bn1</span> <span class="o">=</span> <span class="n">norm_layer</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inplanes</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">relu</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">ReLU</span><span class="p">(</span><span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">maxpool</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">MaxPool2d</span><span class="p">(</span><span class="n">kernel_size</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">padding</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">layer1</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_make_layer</span><span class="p">(</span><span class="n">block</span><span class="p">,</span> <span class="mi">64</span><span class="p">,</span> <span class="n">layers</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="bp">self</span><span class="o">.</span><span class="n">layer2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_make_layer</span><span class="p">(</span><span class="n">block</span><span class="p">,</span> <span class="mi">128</span><span class="p">,</span> <span class="n">layers</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">stride</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">layer3</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_make_layer</span><span class="p">(</span><span class="n">block</span><span class="p">,</span> <span class="mi">256</span><span class="p">,</span> <span class="n">layers</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="n">stride</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">layer4</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_make_layer</span><span class="p">(</span><span class="n">block</span><span class="p">,</span> <span class="mi">512</span><span class="p">,</span> <span class="n">layers</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span> <span class="n">stride</span><span class="o">=</span><span class="n">last_stride</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">global_avgpool</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">AdaptiveAvgPool2d</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">layer2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_make_layer</span><span class="p">(</span><span class="n">block</span><span class="p">,</span> <span class="mi">128</span><span class="p">,</span> <span class="n">layers</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">stride</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">dilate</span><span class="o">=</span><span class="n">replace_stride_with_dilation</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="bp">self</span><span class="o">.</span><span class="n">layer3</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_make_layer</span><span class="p">(</span><span class="n">block</span><span class="p">,</span> <span class="mi">256</span><span class="p">,</span> <span class="n">layers</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="n">stride</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">dilate</span><span class="o">=</span><span class="n">replace_stride_with_dilation</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
<span class="bp">self</span><span class="o">.</span><span class="n">layer4</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_make_layer</span><span class="p">(</span><span class="n">block</span><span class="p">,</span> <span class="mi">512</span><span class="p">,</span> <span class="n">layers</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span> <span class="n">stride</span><span class="o">=</span><span class="n">last_stride</span><span class="p">,</span>
<span class="n">dilate</span><span class="o">=</span><span class="n">replace_stride_with_dilation</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
<span class="bp">self</span><span class="o">.</span><span class="n">global_avgpool</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">AdaptiveAvgPool2d</span><span class="p">((</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">fc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_construct_fc_layer</span><span class="p">(</span><span class="n">fc_dims</span><span class="p">,</span> <span class="mi">512</span> <span class="o">*</span> <span class="n">block</span><span class="o">.</span><span class="n">expansion</span><span class="p">,</span> <span class="n">dropout_p</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">classifier</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Linear</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">feature_dim</span><span class="p">,</span> <span class="n">num_classes</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_init_params</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">_make_layer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">block</span><span class="p">,</span> <span class="n">planes</span><span class="p">,</span> <span class="n">blocks</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
<span class="c1"># Zero-initialize the last BN in each residual branch,</span>
<span class="c1"># so that the residual branch starts with zeros, and each residual block behaves like an identity.</span>
<span class="c1"># This improves the model by 0.2~0.3% according to https://arxiv.org/abs/1706.02677</span>
<span class="k">if</span> <span class="n">zero_init_residual</span><span class="p">:</span>
<span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">modules</span><span class="p">():</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">m</span><span class="p">,</span> <span class="n">Bottleneck</span><span class="p">):</span>
<span class="n">nn</span><span class="o">.</span><span class="n">init</span><span class="o">.</span><span class="n">constant_</span><span class="p">(</span><span class="n">m</span><span class="o">.</span><span class="n">bn3</span><span class="o">.</span><span class="n">weight</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">m</span><span class="p">,</span> <span class="n">BasicBlock</span><span class="p">):</span>
<span class="n">nn</span><span class="o">.</span><span class="n">init</span><span class="o">.</span><span class="n">constant_</span><span class="p">(</span><span class="n">m</span><span class="o">.</span><span class="n">bn2</span><span class="o">.</span><span class="n">weight</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_make_layer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">block</span><span class="p">,</span> <span class="n">planes</span><span class="p">,</span> <span class="n">blocks</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">dilate</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="n">norm_layer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_norm_layer</span>
<span class="n">downsample</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">previous_dilation</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dilation</span>
<span class="k">if</span> <span class="n">dilate</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">dilation</span> <span class="o">*=</span> <span class="n">stride</span>
<span class="n">stride</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">if</span> <span class="n">stride</span> <span class="o">!=</span> <span class="mi">1</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">inplanes</span> <span class="o">!=</span> <span class="n">planes</span> <span class="o">*</span> <span class="n">block</span><span class="o">.</span><span class="n">expansion</span><span class="p">:</span>
<span class="n">downsample</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Sequential</span><span class="p">(</span>
<span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inplanes</span><span class="p">,</span> <span class="n">planes</span> <span class="o">*</span> <span class="n">block</span><span class="o">.</span><span class="n">expansion</span><span class="p">,</span>
<span class="n">kernel_size</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="n">stride</span><span class="p">,</span> <span class="n">bias</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
<span class="n">nn</span><span class="o">.</span><span class="n">BatchNorm2d</span><span class="p">(</span><span class="n">planes</span> <span class="o">*</span> <span class="n">block</span><span class="o">.</span><span class="n">expansion</span><span class="p">),</span>
<span class="n">conv1x1</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inplanes</span><span class="p">,</span> <span class="n">planes</span> <span class="o">*</span> <span class="n">block</span><span class="o">.</span><span class="n">expansion</span><span class="p">,</span> <span class="n">stride</span><span class="p">),</span>
<span class="n">norm_layer</span><span class="p">(</span><span class="n">planes</span> <span class="o">*</span> <span class="n">block</span><span class="o">.</span><span class="n">expansion</span><span class="p">),</span>
<span class="p">)</span>
<span class="n">layers</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">layers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">block</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inplanes</span><span class="p">,</span> <span class="n">planes</span><span class="p">,</span> <span class="n">stride</span><span class="p">,</span> <span class="n">downsample</span><span class="p">))</span>
<span class="n">layers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">block</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inplanes</span><span class="p">,</span> <span class="n">planes</span><span class="p">,</span> <span class="n">stride</span><span class="p">,</span> <span class="n">downsample</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">groups</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">base_width</span><span class="p">,</span> <span class="n">previous_dilation</span><span class="p">,</span> <span class="n">norm_layer</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">inplanes</span> <span class="o">=</span> <span class="n">planes</span> <span class="o">*</span> <span class="n">block</span><span class="o">.</span><span class="n">expansion</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">blocks</span><span class="p">):</span>
<span class="n">layers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">block</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inplanes</span><span class="p">,</span> <span class="n">planes</span><span class="p">))</span>
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">blocks</span><span class="p">):</span>
<span class="n">layers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">block</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inplanes</span><span class="p">,</span> <span class="n">planes</span><span class="p">,</span> <span class="n">groups</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">groups</span><span class="p">,</span>
<span class="n">base_width</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">base_width</span><span class="p">,</span> <span class="n">dilation</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dilation</span><span class="p">,</span>
<span class="n">norm_layer</span><span class="o">=</span><span class="n">norm_layer</span><span class="p">))</span>
<span class="k">return</span> <span class="n">nn</span><span class="o">.</span><span class="n">Sequential</span><span class="p">(</span><span class="o">*</span><span class="n">layers</span><span class="p">)</span>
@ -409,17 +464,7 @@
<span class="n">model</span><span class="o">.</span><span class="n">load_state_dict</span><span class="p">(</span><span class="n">model_dict</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Residual network configurations:</span>
<span class="sd">--</span>
<span class="sd">resnet18: block=BasicBlock, layers=[2, 2, 2, 2]</span>
<span class="sd">resnet34: block=BasicBlock, layers=[3, 4, 6, 3]</span>
<span class="sd">resnet50: block=Bottleneck, layers=[3, 4, 6, 3]</span>
<span class="sd">resnet101: block=Bottleneck, layers=[3, 4, 23, 3]</span>
<span class="sd">resnet152: block=Bottleneck, layers=[3, 8, 36, 3]</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">&quot;&quot;&quot;ResNet&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">resnet18</span><span class="p">(</span><span class="n">num_classes</span><span class="p">,</span> <span class="n">loss</span><span class="o">=</span><span class="s1">&#39;softmax&#39;</span><span class="p">,</span> <span class="n">pretrained</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="n">model</span> <span class="o">=</span> <span class="n">ResNet</span><span class="p">(</span>
<span class="n">num_classes</span><span class="o">=</span><span class="n">num_classes</span><span class="p">,</span>
@ -500,8 +545,45 @@
<span class="k">return</span> <span class="n">model</span>
<span class="sd">&quot;&quot;&quot;ResNeXt&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">resnext50_32x4d</span><span class="p">(</span><span class="n">num_classes</span><span class="p">,</span> <span class="n">loss</span><span class="o">=</span><span class="s1">&#39;softmax&#39;</span><span class="p">,</span> <span class="n">pretrained</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="n">model</span> <span class="o">=</span> <span class="n">ResNet</span><span class="p">(</span>
<span class="n">num_classes</span><span class="o">=</span><span class="n">num_classes</span><span class="p">,</span>
<span class="n">loss</span><span class="o">=</span><span class="n">loss</span><span class="p">,</span>
<span class="n">block</span><span class="o">=</span><span class="n">Bottleneck</span><span class="p">,</span>
<span class="n">layers</span><span class="o">=</span><span class="p">[</span><span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">3</span><span class="p">],</span>
<span class="n">last_stride</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">fc_dims</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">dropout_p</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">groups</span><span class="o">=</span><span class="mi">32</span><span class="p">,</span>
<span class="n">width_per_group</span><span class="o">=</span><span class="mi">4</span><span class="p">,</span>
<span class="o">**</span><span class="n">kwargs</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">pretrained</span><span class="p">:</span>
<span class="n">init_pretrained_weights</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">model_urls</span><span class="p">[</span><span class="s1">&#39;resnext50_32x4d&#39;</span><span class="p">])</span>
<span class="k">return</span> <span class="n">model</span>
<span class="k">def</span> <span class="nf">resnext101_32x8d</span><span class="p">(</span><span class="n">num_classes</span><span class="p">,</span> <span class="n">loss</span><span class="o">=</span><span class="s1">&#39;softmax&#39;</span><span class="p">,</span> <span class="n">pretrained</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="n">model</span> <span class="o">=</span> <span class="n">ResNet</span><span class="p">(</span>
<span class="n">num_classes</span><span class="o">=</span><span class="n">num_classes</span><span class="p">,</span>
<span class="n">loss</span><span class="o">=</span><span class="n">loss</span><span class="p">,</span>
<span class="n">block</span><span class="o">=</span><span class="n">Bottleneck</span><span class="p">,</span>
<span class="n">layers</span><span class="o">=</span><span class="p">[</span><span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">23</span><span class="p">,</span> <span class="mi">3</span><span class="p">],</span>
<span class="n">last_stride</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">fc_dims</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">dropout_p</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">groups</span><span class="o">=</span><span class="mi">32</span><span class="p">,</span>
<span class="n">width_per_group</span><span class="o">=</span><span class="mi">8</span><span class="p">,</span>
<span class="o">**</span><span class="n">kwargs</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">pretrained</span><span class="p">:</span>
<span class="n">init_pretrained_weights</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">model_urls</span><span class="p">[</span><span class="s1">&#39;resnext101_32x8d&#39;</span><span class="p">])</span>
<span class="k">return</span> <span class="n">model</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">resnet + fc</span>
<span class="sd">ResNet + FC</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">resnet50_fc512</span><span class="p">(</span><span class="n">num_classes</span><span class="p">,</span> <span class="n">loss</span><span class="o">=</span><span class="s1">&#39;softmax&#39;</span><span class="p">,</span> <span class="n">pretrained</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="n">model</span> <span class="o">=</span> <span class="n">ResNet</span><span class="p">(</span>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.models.resnetmid &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.models.resnetmid &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -1,447 +0,0 @@
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.models.resnext &mdash; torchreid 0.7.6 documentation</title>
<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" src="../../../_static/js/theme.js"></script>
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</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="../../../index.html" class="icon icon-home"> torchreid
</a>
<div class="version">
0.7.6
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" 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="../../../user_guide.html">How-to</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../datasets.html">Datasets</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../evaluation.html">Evaluation</a></li>
</ul>
<p class="caption"><span class="caption-text">Package Reference</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../../pkg/data.html">torchreid.data</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../pkg/engine.html">torchreid.engine</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../pkg/losses.html">torchreid.losses</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../pkg/metrics.html">torchreid.metrics</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../pkg/models.html">torchreid.models</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../pkg/optim.html">torchreid.optim</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../pkg/utils.html">torchreid.utils</a></li>
</ul>
<p class="caption"><span class="caption-text">Resources</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../../AWESOME_REID.html">Awesome-ReID</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../MODEL_ZOO.html">Model Zoo</a></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="../../../index.html">torchreid</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="../../../index.html">Docs</a> &raquo;</li>
<li><a href="../../index.html">Module code</a> &raquo;</li>
<li>torchreid.models.resnext</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for torchreid.models.resnext</h1><div class="highlight"><pre>
<span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">absolute_import</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">division</span>
<span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;resnext50_32x4d&#39;</span><span class="p">,</span> <span class="s1">&#39;resnext50_32x4d_fc512&#39;</span><span class="p">]</span>
<span class="kn">import</span> <span class="nn">math</span>
<span class="kn">import</span> <span class="nn">torch</span>
<span class="kn">from</span> <span class="nn">torch</span> <span class="k">import</span> <span class="n">nn</span>
<span class="kn">from</span> <span class="nn">torch.nn</span> <span class="k">import</span> <span class="n">functional</span> <span class="k">as</span> <span class="n">F</span>
<span class="kn">import</span> <span class="nn">torchvision</span>
<span class="kn">import</span> <span class="nn">torch.utils.model_zoo</span> <span class="k">as</span> <span class="nn">model_zoo</span>
<span class="n">model_urls</span> <span class="o">=</span> <span class="p">{</span>
<span class="c1"># top1 = 76.3</span>
<span class="s1">&#39;resnext50_32x4d&#39;</span><span class="p">:</span> <span class="s1">&#39;http://www.eecs.qmul.ac.uk/~kz303/deep-person-reid/model-zoo/imagenet-pretrained/resnext50_32x4d-453b60f8.pth&#39;</span><span class="p">,</span>
<span class="p">}</span>
<span class="k">class</span> <span class="nc">ResNeXtBottleneck</span><span class="p">(</span><span class="n">nn</span><span class="o">.</span><span class="n">Module</span><span class="p">):</span>
<span class="n">expansion</span> <span class="o">=</span> <span class="mi">4</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">inplanes</span><span class="p">,</span> <span class="n">planes</span><span class="p">,</span> <span class="n">groups</span><span class="o">=</span><span class="mi">32</span><span class="p">,</span> <span class="n">base_width</span><span class="o">=</span><span class="mi">4</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">downsample</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">ResNeXtBottleneck</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="n">width</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">floor</span><span class="p">(</span><span class="n">planes</span> <span class="o">*</span> <span class="p">(</span><span class="n">base_width</span> <span class="o">/</span> <span class="mf">64.</span><span class="p">))</span> <span class="o">*</span> <span class="n">groups</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conv1</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">(</span><span class="n">inplanes</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">bias</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">bn1</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">BatchNorm2d</span><span class="p">(</span><span class="n">width</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conv2</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">(</span><span class="n">width</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="n">stride</span><span class="p">,</span> <span class="n">padding</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">groups</span><span class="o">=</span><span class="n">groups</span><span class="p">,</span> <span class="n">bias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">bn2</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">BatchNorm2d</span><span class="p">(</span><span class="n">width</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conv3</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">(</span><span class="n">width</span><span class="p">,</span> <span class="n">planes</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">expansion</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">bias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">bn3</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">BatchNorm2d</span><span class="p">(</span><span class="n">planes</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">expansion</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">relu</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">ReLU</span><span class="p">(</span><span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">downsample</span> <span class="o">=</span> <span class="n">downsample</span>
<span class="bp">self</span><span class="o">.</span><span class="n">stride</span> <span class="o">=</span> <span class="n">stride</span>
<span class="k">def</span> <span class="nf">forward</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
<span class="n">residual</span> <span class="o">=</span> <span class="n">x</span>
<span class="n">out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">conv1</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="n">out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">bn1</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
<span class="n">out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">relu</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
<span class="n">out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">conv2</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
<span class="n">out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">bn2</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
<span class="n">out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">relu</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
<span class="n">out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">conv3</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
<span class="n">out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">bn3</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">downsample</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">residual</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">downsample</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="n">out</span> <span class="o">+=</span> <span class="n">residual</span>
<span class="n">out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">relu</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
<span class="k">return</span> <span class="n">out</span>
<div class="viewcode-block" id="ResNeXt"><a class="viewcode-back" href="../../../pkg/models.html#torchreid.models.resnext.ResNeXt">[docs]</a><span class="k">class</span> <span class="nc">ResNeXt</span><span class="p">(</span><span class="n">nn</span><span class="o">.</span><span class="n">Module</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;ResNeXt.</span>
<span class="sd"> </span>
<span class="sd"> Reference:</span>
<span class="sd"> Xie et al. Aggregated Residual Transformations for Deep</span>
<span class="sd"> Neural Networks. CVPR 2017.</span>
<span class="sd"> Public keys:</span>
<span class="sd"> - ``resnext50_32x4d``: ResNeXt50 (groups=32, width=4).</span>
<span class="sd"> - ``resnext50_32x4d_fc512`` ResNeXt50 (groups=32, width=4) + FC.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">num_classes</span><span class="p">,</span> <span class="n">loss</span><span class="p">,</span> <span class="n">block</span><span class="p">,</span> <span class="n">layers</span><span class="p">,</span>
<span class="n">groups</span><span class="o">=</span><span class="mi">32</span><span class="p">,</span>
<span class="n">base_width</span><span class="o">=</span><span class="mi">4</span><span class="p">,</span>
<span class="n">last_stride</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">fc_dims</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">dropout_p</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">inplanes</span> <span class="o">=</span> <span class="mi">64</span>
<span class="nb">super</span><span class="p">(</span><span class="n">ResNeXt</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">loss</span> <span class="o">=</span> <span class="n">loss</span>
<span class="bp">self</span><span class="o">.</span><span class="n">feature_dim</span> <span class="o">=</span> <span class="mi">512</span> <span class="o">*</span> <span class="n">block</span><span class="o">.</span><span class="n">expansion</span>
<span class="c1"># backbone network</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conv1</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">64</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">7</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">padding</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">bias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">bn1</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">BatchNorm2d</span><span class="p">(</span><span class="mi">64</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">relu</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">ReLU</span><span class="p">(</span><span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">maxpool</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">MaxPool2d</span><span class="p">(</span><span class="n">kernel_size</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">padding</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">layer1</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_make_layer</span><span class="p">(</span><span class="n">block</span><span class="p">,</span> <span class="mi">64</span><span class="p">,</span> <span class="n">layers</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">groups</span><span class="p">,</span> <span class="n">base_width</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">layer2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_make_layer</span><span class="p">(</span><span class="n">block</span><span class="p">,</span> <span class="mi">128</span><span class="p">,</span> <span class="n">layers</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">groups</span><span class="p">,</span> <span class="n">base_width</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">layer3</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_make_layer</span><span class="p">(</span><span class="n">block</span><span class="p">,</span> <span class="mi">256</span><span class="p">,</span> <span class="n">layers</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="n">groups</span><span class="p">,</span> <span class="n">base_width</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">layer4</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_make_layer</span><span class="p">(</span><span class="n">block</span><span class="p">,</span> <span class="mi">512</span><span class="p">,</span> <span class="n">layers</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span> <span class="n">groups</span><span class="p">,</span> <span class="n">base_width</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="n">last_stride</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">global_avgpool</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">AdaptiveAvgPool2d</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">fc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_construct_fc_layer</span><span class="p">(</span><span class="n">fc_dims</span><span class="p">,</span> <span class="mi">512</span> <span class="o">*</span> <span class="n">block</span><span class="o">.</span><span class="n">expansion</span><span class="p">,</span> <span class="n">dropout_p</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">classifier</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Linear</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">feature_dim</span><span class="p">,</span> <span class="n">num_classes</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_init_params</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">_make_layer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">block</span><span class="p">,</span> <span class="n">planes</span><span class="p">,</span> <span class="n">blocks</span><span class="p">,</span> <span class="n">groups</span><span class="p">,</span> <span class="n">base_width</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
<span class="n">downsample</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="n">stride</span> <span class="o">!=</span> <span class="mi">1</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">inplanes</span> <span class="o">!=</span> <span class="n">planes</span> <span class="o">*</span> <span class="n">block</span><span class="o">.</span><span class="n">expansion</span><span class="p">:</span>
<span class="n">downsample</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Sequential</span><span class="p">(</span>
<span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inplanes</span><span class="p">,</span> <span class="n">planes</span> <span class="o">*</span> <span class="n">block</span><span class="o">.</span><span class="n">expansion</span><span class="p">,</span>
<span class="n">kernel_size</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="n">stride</span><span class="p">,</span> <span class="n">bias</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
<span class="n">nn</span><span class="o">.</span><span class="n">BatchNorm2d</span><span class="p">(</span><span class="n">planes</span> <span class="o">*</span> <span class="n">block</span><span class="o">.</span><span class="n">expansion</span><span class="p">),</span>
<span class="p">)</span>
<span class="n">layers</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">layers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">block</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inplanes</span><span class="p">,</span> <span class="n">planes</span><span class="p">,</span> <span class="n">groups</span><span class="p">,</span> <span class="n">base_width</span><span class="p">,</span> <span class="n">stride</span><span class="p">,</span> <span class="n">downsample</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">inplanes</span> <span class="o">=</span> <span class="n">planes</span> <span class="o">*</span> <span class="n">block</span><span class="o">.</span><span class="n">expansion</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">blocks</span><span class="p">):</span>
<span class="n">layers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">block</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inplanes</span><span class="p">,</span> <span class="n">planes</span><span class="p">,</span> <span class="n">groups</span><span class="p">,</span> <span class="n">base_width</span><span class="p">))</span>
<span class="k">return</span> <span class="n">nn</span><span class="o">.</span><span class="n">Sequential</span><span class="p">(</span><span class="o">*</span><span class="n">layers</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_construct_fc_layer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fc_dims</span><span class="p">,</span> <span class="n">input_dim</span><span class="p">,</span> <span class="n">dropout_p</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Constructs fully connected layer.</span>
<span class="sd"> Args:</span>
<span class="sd"> fc_dims (list or tuple): dimensions of fc layers, if None, no fc layers are constructed</span>
<span class="sd"> input_dim (int): input dimension</span>
<span class="sd"> dropout_p (float): dropout probability, if None, dropout is unused</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">fc_dims</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">feature_dim</span> <span class="o">=</span> <span class="n">input_dim</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">fc_dims</span><span class="p">,</span> <span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">)),</span> <span class="s1">&#39;fc_dims must be either list or tuple, but got </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">fc_dims</span><span class="p">))</span>
<span class="n">layers</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">dim</span> <span class="ow">in</span> <span class="n">fc_dims</span><span class="p">:</span>
<span class="n">layers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">nn</span><span class="o">.</span><span class="n">Linear</span><span class="p">(</span><span class="n">input_dim</span><span class="p">,</span> <span class="n">dim</span><span class="p">))</span>
<span class="n">layers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">nn</span><span class="o">.</span><span class="n">BatchNorm1d</span><span class="p">(</span><span class="n">dim</span><span class="p">))</span>
<span class="n">layers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">nn</span><span class="o">.</span><span class="n">ReLU</span><span class="p">(</span><span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
<span class="k">if</span> <span class="n">dropout_p</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">layers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">nn</span><span class="o">.</span><span class="n">Dropout</span><span class="p">(</span><span class="n">p</span><span class="o">=</span><span class="n">dropout_p</span><span class="p">))</span>
<span class="n">input_dim</span> <span class="o">=</span> <span class="n">dim</span>
<span class="bp">self</span><span class="o">.</span><span class="n">feature_dim</span> <span class="o">=</span> <span class="n">fc_dims</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="k">return</span> <span class="n">nn</span><span class="o">.</span><span class="n">Sequential</span><span class="p">(</span><span class="o">*</span><span class="n">layers</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_init_params</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">modules</span><span class="p">():</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">m</span><span class="p">,</span> <span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">):</span>
<span class="n">nn</span><span class="o">.</span><span class="n">init</span><span class="o">.</span><span class="n">kaiming_normal_</span><span class="p">(</span><span class="n">m</span><span class="o">.</span><span class="n">weight</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s1">&#39;fan_out&#39;</span><span class="p">,</span> <span class="n">nonlinearity</span><span class="o">=</span><span class="s1">&#39;relu&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">m</span><span class="o">.</span><span class="n">bias</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">nn</span><span class="o">.</span><span class="n">init</span><span class="o">.</span><span class="n">constant_</span><span class="p">(</span><span class="n">m</span><span class="o">.</span><span class="n">bias</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">m</span><span class="p">,</span> <span class="n">nn</span><span class="o">.</span><span class="n">BatchNorm2d</span><span class="p">):</span>
<span class="n">nn</span><span class="o">.</span><span class="n">init</span><span class="o">.</span><span class="n">constant_</span><span class="p">(</span><span class="n">m</span><span class="o">.</span><span class="n">weight</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">nn</span><span class="o">.</span><span class="n">init</span><span class="o">.</span><span class="n">constant_</span><span class="p">(</span><span class="n">m</span><span class="o">.</span><span class="n">bias</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">m</span><span class="p">,</span> <span class="n">nn</span><span class="o">.</span><span class="n">BatchNorm1d</span><span class="p">):</span>
<span class="n">nn</span><span class="o">.</span><span class="n">init</span><span class="o">.</span><span class="n">constant_</span><span class="p">(</span><span class="n">m</span><span class="o">.</span><span class="n">weight</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">nn</span><span class="o">.</span><span class="n">init</span><span class="o">.</span><span class="n">constant_</span><span class="p">(</span><span class="n">m</span><span class="o">.</span><span class="n">bias</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">m</span><span class="p">,</span> <span class="n">nn</span><span class="o">.</span><span class="n">Linear</span><span class="p">):</span>
<span class="n">nn</span><span class="o">.</span><span class="n">init</span><span class="o">.</span><span class="n">normal_</span><span class="p">(</span><span class="n">m</span><span class="o">.</span><span class="n">weight</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mf">0.01</span><span class="p">)</span>
<span class="k">if</span> <span class="n">m</span><span class="o">.</span><span class="n">bias</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">nn</span><span class="o">.</span><span class="n">init</span><span class="o">.</span><span class="n">constant_</span><span class="p">(</span><span class="n">m</span><span class="o">.</span><span class="n">bias</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">featuremaps</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
<span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">conv1</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">bn1</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">relu</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">maxpool</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">layer1</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">layer2</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">layer3</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">layer4</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="k">return</span> <span class="n">x</span>
<span class="k">def</span> <span class="nf">forward</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
<span class="n">f</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">featuremaps</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="n">v</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">global_avgpool</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
<span class="n">v</span> <span class="o">=</span> <span class="n">v</span><span class="o">.</span><span class="n">view</span><span class="p">(</span><span class="n">v</span><span class="o">.</span><span class="n">size</span><span class="p">(</span><span class="mi">0</span><span class="p">),</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">fc</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">v</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fc</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">training</span><span class="p">:</span>
<span class="k">return</span> <span class="n">v</span>
<span class="n">y</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">classifier</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">loss</span> <span class="o">==</span> <span class="s1">&#39;softmax&#39;</span><span class="p">:</span>
<span class="k">return</span> <span class="n">y</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">loss</span> <span class="o">==</span> <span class="s1">&#39;triplet&#39;</span><span class="p">:</span>
<span class="k">return</span> <span class="n">y</span><span class="p">,</span> <span class="n">v</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span><span class="s2">&quot;Unsupported loss: </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">loss</span><span class="p">))</span></div>
<span class="k">def</span> <span class="nf">init_pretrained_weights</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">model_url</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Initializes model with pretrained weights.</span>
<span class="sd"> </span>
<span class="sd"> Layers that don&#39;t match with pretrained layers in name or size are kept unchanged.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">pretrain_dict</span> <span class="o">=</span> <span class="n">model_zoo</span><span class="o">.</span><span class="n">load_url</span><span class="p">(</span><span class="n">model_url</span><span class="p">)</span>
<span class="n">model_dict</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">state_dict</span><span class="p">()</span>
<span class="n">pretrain_dict</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="n">v</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">pretrain_dict</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">model_dict</span> <span class="ow">and</span> <span class="n">model_dict</span><span class="p">[</span><span class="n">k</span><span class="p">]</span><span class="o">.</span><span class="n">size</span><span class="p">()</span> <span class="o">==</span> <span class="n">v</span><span class="o">.</span><span class="n">size</span><span class="p">()}</span>
<span class="n">model_dict</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">pretrain_dict</span><span class="p">)</span>
<span class="n">model</span><span class="o">.</span><span class="n">load_state_dict</span><span class="p">(</span><span class="n">model_dict</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">resnext50_32x4d</span><span class="p">(</span><span class="n">num_classes</span><span class="p">,</span> <span class="n">loss</span><span class="o">=</span><span class="s1">&#39;softmax&#39;</span><span class="p">,</span> <span class="n">pretrained</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="n">model</span> <span class="o">=</span> <span class="n">ResNeXt</span><span class="p">(</span>
<span class="n">num_classes</span><span class="o">=</span><span class="n">num_classes</span><span class="p">,</span>
<span class="n">loss</span><span class="o">=</span><span class="n">loss</span><span class="p">,</span>
<span class="n">block</span><span class="o">=</span><span class="n">ResNeXtBottleneck</span><span class="p">,</span>
<span class="n">layers</span><span class="o">=</span><span class="p">[</span><span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">3</span><span class="p">],</span>
<span class="n">groups</span><span class="o">=</span><span class="mi">32</span><span class="p">,</span>
<span class="n">base_width</span><span class="o">=</span><span class="mi">4</span><span class="p">,</span>
<span class="n">last_stride</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">fc_dims</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">dropout_p</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="o">**</span><span class="n">kwargs</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">pretrained</span><span class="p">:</span>
<span class="n">init_pretrained_weights</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">model_urls</span><span class="p">[</span><span class="s1">&#39;resnext50_32x4d&#39;</span><span class="p">])</span>
<span class="k">return</span> <span class="n">model</span>
<span class="k">def</span> <span class="nf">resnext50_32x4d_fc512</span><span class="p">(</span><span class="n">num_classes</span><span class="p">,</span> <span class="n">loss</span><span class="o">=</span><span class="s1">&#39;softmax&#39;</span><span class="p">,</span> <span class="n">pretrained</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="n">model</span> <span class="o">=</span> <span class="n">ResNeXt</span><span class="p">(</span>
<span class="n">num_classes</span><span class="o">=</span><span class="n">num_classes</span><span class="p">,</span>
<span class="n">loss</span><span class="o">=</span><span class="n">loss</span><span class="p">,</span>
<span class="n">block</span><span class="o">=</span><span class="n">ResNeXtBottleneck</span><span class="p">,</span>
<span class="n">layers</span><span class="o">=</span><span class="p">[</span><span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">3</span><span class="p">],</span>
<span class="n">groups</span><span class="o">=</span><span class="mi">32</span><span class="p">,</span>
<span class="n">base_width</span><span class="o">=</span><span class="mi">4</span><span class="p">,</span>
<span class="n">last_stride</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
<span class="n">fc_dims</span><span class="o">=</span><span class="p">[</span><span class="mi">512</span><span class="p">],</span>
<span class="n">dropout_p</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="o">**</span><span class="n">kwargs</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">pretrained</span><span class="p">:</span>
<span class="n">init_pretrained_weights</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">model_urls</span><span class="p">[</span><span class="s1">&#39;resnext50_32x4d&#39;</span><span class="p">])</span>
<span class="k">return</span> <span class="n">model</span>
</pre></div>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>
&copy; Copyright 2019, Kaiyang Zhou
</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/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>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.models.senet &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.models.senet &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.models.shufflenet &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.models.shufflenet &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -0,0 +1,419 @@
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.models.shufflenetv2 &mdash; torchreid 0.7.7 documentation</title>
<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" src="../../../_static/js/theme.js"></script>
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</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="../../../index.html" class="icon icon-home"> torchreid
</a>
<div class="version">
0.7.7
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" 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="../../../user_guide.html">How-to</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../datasets.html">Datasets</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../evaluation.html">Evaluation</a></li>
</ul>
<p class="caption"><span class="caption-text">Package Reference</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../../pkg/data.html">torchreid.data</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../pkg/engine.html">torchreid.engine</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../pkg/losses.html">torchreid.losses</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../pkg/metrics.html">torchreid.metrics</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../pkg/models.html">torchreid.models</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../pkg/optim.html">torchreid.optim</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../pkg/utils.html">torchreid.utils</a></li>
</ul>
<p class="caption"><span class="caption-text">Resources</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../../AWESOME_REID.html">Awesome-ReID</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../MODEL_ZOO.html">Model Zoo</a></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="../../../index.html">torchreid</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="../../../index.html">Docs</a> &raquo;</li>
<li><a href="../../index.html">Module code</a> &raquo;</li>
<li>torchreid.models.shufflenetv2</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for torchreid.models.shufflenetv2</h1><div class="highlight"><pre>
<span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Code source: https://github.com/pytorch/vision</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">absolute_import</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">division</span>
<span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;shufflenet_v2_x0_5&#39;</span><span class="p">,</span> <span class="s1">&#39;shufflenet_v2_x1_0&#39;</span><span class="p">,</span> <span class="s1">&#39;shufflenet_v2_x1_5&#39;</span><span class="p">,</span> <span class="s1">&#39;shufflenet_v2_x2_0&#39;</span><span class="p">]</span>
<span class="kn">import</span> <span class="nn">torch</span>
<span class="kn">from</span> <span class="nn">torch</span> <span class="k">import</span> <span class="n">nn</span>
<span class="kn">from</span> <span class="nn">torch.nn</span> <span class="k">import</span> <span class="n">functional</span> <span class="k">as</span> <span class="n">F</span>
<span class="kn">import</span> <span class="nn">torchvision</span>
<span class="kn">import</span> <span class="nn">torch.utils.model_zoo</span> <span class="k">as</span> <span class="nn">model_zoo</span>
<span class="n">model_urls</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;shufflenetv2_x0.5&#39;</span><span class="p">:</span> <span class="s1">&#39;https://download.pytorch.org/models/shufflenetv2_x0.5-f707e7126e.pth&#39;</span><span class="p">,</span>
<span class="s1">&#39;shufflenetv2_x1.0&#39;</span><span class="p">:</span> <span class="s1">&#39;https://download.pytorch.org/models/shufflenetv2_x1-5666bf0f80.pth&#39;</span><span class="p">,</span>
<span class="s1">&#39;shufflenetv2_x1.5&#39;</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
<span class="s1">&#39;shufflenetv2_x2.0&#39;</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
<span class="p">}</span>
<span class="k">def</span> <span class="nf">channel_shuffle</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">groups</span><span class="p">):</span>
<span class="n">batchsize</span><span class="p">,</span> <span class="n">num_channels</span><span class="p">,</span> <span class="n">height</span><span class="p">,</span> <span class="n">width</span> <span class="o">=</span> <span class="n">x</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">size</span><span class="p">()</span>
<span class="n">channels_per_group</span> <span class="o">=</span> <span class="n">num_channels</span> <span class="o">//</span> <span class="n">groups</span>
<span class="c1"># reshape</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">x</span><span class="o">.</span><span class="n">view</span><span class="p">(</span><span class="n">batchsize</span><span class="p">,</span> <span class="n">groups</span><span class="p">,</span>
<span class="n">channels_per_group</span><span class="p">,</span> <span class="n">height</span><span class="p">,</span> <span class="n">width</span><span class="p">)</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">transpose</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span><span class="o">.</span><span class="n">contiguous</span><span class="p">()</span>
<span class="c1"># flatten</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">x</span><span class="o">.</span><span class="n">view</span><span class="p">(</span><span class="n">batchsize</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">height</span><span class="p">,</span> <span class="n">width</span><span class="p">)</span>
<span class="k">return</span> <span class="n">x</span>
<span class="k">class</span> <span class="nc">InvertedResidual</span><span class="p">(</span><span class="n">nn</span><span class="o">.</span><span class="n">Module</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">inp</span><span class="p">,</span> <span class="n">oup</span><span class="p">,</span> <span class="n">stride</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">InvertedResidual</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="mi">1</span> <span class="o">&lt;=</span> <span class="n">stride</span> <span class="o">&lt;=</span> <span class="mi">3</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;illegal stride value&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">stride</span> <span class="o">=</span> <span class="n">stride</span>
<span class="n">branch_features</span> <span class="o">=</span> <span class="n">oup</span> <span class="o">//</span> <span class="mi">2</span>
<span class="k">assert</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">stride</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">inp</span> <span class="o">==</span> <span class="n">branch_features</span> <span class="o">&lt;&lt;</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">stride</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">branch1</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Sequential</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">depthwise_conv</span><span class="p">(</span><span class="n">inp</span><span class="p">,</span> <span class="n">inp</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">stride</span><span class="p">,</span> <span class="n">padding</span><span class="o">=</span><span class="mi">1</span><span class="p">),</span>
<span class="n">nn</span><span class="o">.</span><span class="n">BatchNorm2d</span><span class="p">(</span><span class="n">inp</span><span class="p">),</span>
<span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">(</span><span class="n">inp</span><span class="p">,</span> <span class="n">branch_features</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">padding</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">bias</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
<span class="n">nn</span><span class="o">.</span><span class="n">BatchNorm2d</span><span class="p">(</span><span class="n">branch_features</span><span class="p">),</span>
<span class="n">nn</span><span class="o">.</span><span class="n">ReLU</span><span class="p">(</span><span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">branch2</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Sequential</span><span class="p">(</span>
<span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">(</span><span class="n">inp</span> <span class="k">if</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">stride</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">)</span> <span class="k">else</span> <span class="n">branch_features</span><span class="p">,</span>
<span class="n">branch_features</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">padding</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">bias</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
<span class="n">nn</span><span class="o">.</span><span class="n">BatchNorm2d</span><span class="p">(</span><span class="n">branch_features</span><span class="p">),</span>
<span class="n">nn</span><span class="o">.</span><span class="n">ReLU</span><span class="p">(</span><span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
<span class="bp">self</span><span class="o">.</span><span class="n">depthwise_conv</span><span class="p">(</span><span class="n">branch_features</span><span class="p">,</span> <span class="n">branch_features</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">stride</span><span class="p">,</span> <span class="n">padding</span><span class="o">=</span><span class="mi">1</span><span class="p">),</span>
<span class="n">nn</span><span class="o">.</span><span class="n">BatchNorm2d</span><span class="p">(</span><span class="n">branch_features</span><span class="p">),</span>
<span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">(</span><span class="n">branch_features</span><span class="p">,</span> <span class="n">branch_features</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">padding</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">bias</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
<span class="n">nn</span><span class="o">.</span><span class="n">BatchNorm2d</span><span class="p">(</span><span class="n">branch_features</span><span class="p">),</span>
<span class="n">nn</span><span class="o">.</span><span class="n">ReLU</span><span class="p">(</span><span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
<span class="p">)</span>
<span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">depthwise_conv</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">o</span><span class="p">,</span> <span class="n">kernel_size</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">padding</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">bias</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="k">return</span> <span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">o</span><span class="p">,</span> <span class="n">kernel_size</span><span class="p">,</span> <span class="n">stride</span><span class="p">,</span> <span class="n">padding</span><span class="p">,</span> <span class="n">bias</span><span class="o">=</span><span class="n">bias</span><span class="p">,</span> <span class="n">groups</span><span class="o">=</span><span class="n">i</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">forward</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">stride</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">x1</span><span class="p">,</span> <span class="n">x2</span> <span class="o">=</span> <span class="n">x</span><span class="o">.</span><span class="n">chunk</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">dim</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="n">out</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">cat</span><span class="p">((</span><span class="n">x1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">branch2</span><span class="p">(</span><span class="n">x2</span><span class="p">)),</span> <span class="n">dim</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">out</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">cat</span><span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">branch1</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">branch2</span><span class="p">(</span><span class="n">x</span><span class="p">)),</span> <span class="n">dim</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="n">out</span> <span class="o">=</span> <span class="n">channel_shuffle</span><span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="k">return</span> <span class="n">out</span>
<div class="viewcode-block" id="ShuffleNetV2"><a class="viewcode-back" href="../../../pkg/models.html#torchreid.models.shufflenetv2.ShuffleNetV2">[docs]</a><span class="k">class</span> <span class="nc">ShuffleNetV2</span><span class="p">(</span><span class="n">nn</span><span class="o">.</span><span class="n">Module</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;ShuffleNetV2.</span>
<span class="sd"> </span>
<span class="sd"> Reference:</span>
<span class="sd"> Ma et al. ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design. ECCV 2018.</span>
<span class="sd"> Public keys:</span>
<span class="sd"> - ``shufflenet_v2_x0_5``: ShuffleNetV2 x0.5.</span>
<span class="sd"> - ``shufflenet_v2_x1_0``: ShuffleNetV2 x1.0.</span>
<span class="sd"> - ``shufflenet_v2_x1_5``: ShuffleNetV2 x1.5.</span>
<span class="sd"> - ``shufflenet_v2_x2_0``: ShuffleNetV2 x2.0.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">num_classes</span><span class="p">,</span> <span class="n">loss</span><span class="p">,</span> <span class="n">stages_repeats</span><span class="p">,</span> <span class="n">stages_out_channels</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">ShuffleNetV2</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">loss</span> <span class="o">=</span> <span class="n">loss</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">stages_repeats</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">3</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;expected stages_repeats as list of 3 positive ints&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">stages_out_channels</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">5</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;expected stages_out_channels as list of 5 positive ints&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_stage_out_channels</span> <span class="o">=</span> <span class="n">stages_out_channels</span>
<span class="n">input_channels</span> <span class="o">=</span> <span class="mi">3</span>
<span class="n">output_channels</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_stage_out_channels</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conv1</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Sequential</span><span class="p">(</span>
<span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">(</span><span class="n">input_channels</span><span class="p">,</span> <span class="n">output_channels</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">bias</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
<span class="n">nn</span><span class="o">.</span><span class="n">BatchNorm2d</span><span class="p">(</span><span class="n">output_channels</span><span class="p">),</span>
<span class="n">nn</span><span class="o">.</span><span class="n">ReLU</span><span class="p">(</span><span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
<span class="p">)</span>
<span class="n">input_channels</span> <span class="o">=</span> <span class="n">output_channels</span>
<span class="bp">self</span><span class="o">.</span><span class="n">maxpool</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">MaxPool2d</span><span class="p">(</span><span class="n">kernel_size</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">padding</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="n">stage_names</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;stage</span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">]]</span>
<span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">repeats</span><span class="p">,</span> <span class="n">output_channels</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span>
<span class="n">stage_names</span><span class="p">,</span> <span class="n">stages_repeats</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_stage_out_channels</span><span class="p">[</span><span class="mi">1</span><span class="p">:]):</span>
<span class="n">seq</span> <span class="o">=</span> <span class="p">[</span><span class="n">InvertedResidual</span><span class="p">(</span><span class="n">input_channels</span><span class="p">,</span> <span class="n">output_channels</span><span class="p">,</span> <span class="mi">2</span><span class="p">)]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">repeats</span> <span class="o">-</span> <span class="mi">1</span><span class="p">):</span>
<span class="n">seq</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">InvertedResidual</span><span class="p">(</span><span class="n">output_channels</span><span class="p">,</span> <span class="n">output_channels</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
<span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">nn</span><span class="o">.</span><span class="n">Sequential</span><span class="p">(</span><span class="o">*</span><span class="n">seq</span><span class="p">))</span>
<span class="n">input_channels</span> <span class="o">=</span> <span class="n">output_channels</span>
<span class="n">output_channels</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_stage_out_channels</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conv5</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Sequential</span><span class="p">(</span>
<span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">(</span><span class="n">input_channels</span><span class="p">,</span> <span class="n">output_channels</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">bias</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
<span class="n">nn</span><span class="o">.</span><span class="n">BatchNorm2d</span><span class="p">(</span><span class="n">output_channels</span><span class="p">),</span>
<span class="n">nn</span><span class="o">.</span><span class="n">ReLU</span><span class="p">(</span><span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">global_avgpool</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">AdaptiveAvgPool2d</span><span class="p">((</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">classifier</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Linear</span><span class="p">(</span><span class="n">output_channels</span><span class="p">,</span> <span class="n">num_classes</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">featuremaps</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
<span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">conv1</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">maxpool</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">stage2</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">stage3</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">stage4</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">conv5</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="k">return</span> <span class="n">x</span>
<span class="k">def</span> <span class="nf">forward</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
<span class="n">f</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">featuremaps</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="n">v</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">global_avgpool</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
<span class="n">v</span> <span class="o">=</span> <span class="n">v</span><span class="o">.</span><span class="n">view</span><span class="p">(</span><span class="n">v</span><span class="o">.</span><span class="n">size</span><span class="p">(</span><span class="mi">0</span><span class="p">),</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">training</span><span class="p">:</span>
<span class="k">return</span> <span class="n">v</span>
<span class="n">y</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">classifier</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">loss</span> <span class="o">==</span> <span class="s1">&#39;softmax&#39;</span><span class="p">:</span>
<span class="k">return</span> <span class="n">y</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">loss</span> <span class="o">==</span> <span class="s1">&#39;triplet&#39;</span><span class="p">:</span>
<span class="k">return</span> <span class="n">y</span><span class="p">,</span> <span class="n">v</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span><span class="s2">&quot;Unsupported loss: </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">loss</span><span class="p">))</span></div>
<span class="k">def</span> <span class="nf">init_pretrained_weights</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">model_url</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Initializes model with pretrained weights.</span>
<span class="sd"> </span>
<span class="sd"> Layers that don&#39;t match with pretrained layers in name or size are kept unchanged.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">model_url</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">warnings</span>
<span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s1">&#39;ImageNet pretrained weights are unavailable for this model&#39;</span><span class="p">)</span>
<span class="k">return</span>
<span class="n">pretrain_dict</span> <span class="o">=</span> <span class="n">model_zoo</span><span class="o">.</span><span class="n">load_url</span><span class="p">(</span><span class="n">model_url</span><span class="p">)</span>
<span class="n">model_dict</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">state_dict</span><span class="p">()</span>
<span class="n">pretrain_dict</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="n">v</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">pretrain_dict</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">model_dict</span> <span class="ow">and</span> <span class="n">model_dict</span><span class="p">[</span><span class="n">k</span><span class="p">]</span><span class="o">.</span><span class="n">size</span><span class="p">()</span> <span class="o">==</span> <span class="n">v</span><span class="o">.</span><span class="n">size</span><span class="p">()}</span>
<span class="n">model_dict</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">pretrain_dict</span><span class="p">)</span>
<span class="n">model</span><span class="o">.</span><span class="n">load_state_dict</span><span class="p">(</span><span class="n">model_dict</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">shufflenet_v2_x0_5</span><span class="p">(</span><span class="n">num_classes</span><span class="p">,</span> <span class="n">loss</span><span class="o">=</span><span class="s1">&#39;softmax&#39;</span><span class="p">,</span> <span class="n">pretrained</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="n">model</span> <span class="o">=</span> <span class="n">ShuffleNetV2</span><span class="p">(</span><span class="n">num_classes</span><span class="p">,</span> <span class="n">loss</span><span class="p">,</span> <span class="p">[</span><span class="mi">4</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">4</span><span class="p">],</span> <span class="p">[</span><span class="mi">24</span><span class="p">,</span> <span class="mi">48</span><span class="p">,</span> <span class="mi">96</span><span class="p">,</span> <span class="mi">192</span><span class="p">,</span> <span class="mi">1024</span><span class="p">],</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="k">if</span> <span class="n">pretrained</span><span class="p">:</span>
<span class="n">init_pretrained_weights</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">model_urls</span><span class="p">[</span><span class="s1">&#39;shufflenetv2_x0.5&#39;</span><span class="p">])</span>
<span class="k">return</span> <span class="n">model</span>
<span class="k">def</span> <span class="nf">shufflenet_v2_x1_0</span><span class="p">(</span><span class="n">num_classes</span><span class="p">,</span> <span class="n">loss</span><span class="o">=</span><span class="s1">&#39;softmax&#39;</span><span class="p">,</span> <span class="n">pretrained</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="n">model</span> <span class="o">=</span> <span class="n">ShuffleNetV2</span><span class="p">(</span><span class="n">num_classes</span><span class="p">,</span> <span class="n">loss</span><span class="p">,</span> <span class="p">[</span><span class="mi">4</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">4</span><span class="p">],</span> <span class="p">[</span><span class="mi">24</span><span class="p">,</span> <span class="mi">116</span><span class="p">,</span> <span class="mi">232</span><span class="p">,</span> <span class="mi">464</span><span class="p">,</span> <span class="mi">1024</span><span class="p">],</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="k">if</span> <span class="n">pretrained</span><span class="p">:</span>
<span class="n">init_pretrained_weights</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">model_urls</span><span class="p">[</span><span class="s1">&#39;shufflenetv2_x1.0&#39;</span><span class="p">])</span>
<span class="k">return</span> <span class="n">model</span>
<span class="k">def</span> <span class="nf">shufflenet_v2_x1_5</span><span class="p">(</span><span class="n">num_classes</span><span class="p">,</span> <span class="n">loss</span><span class="o">=</span><span class="s1">&#39;softmax&#39;</span><span class="p">,</span> <span class="n">pretrained</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="n">model</span> <span class="o">=</span> <span class="n">ShuffleNetV2</span><span class="p">(</span><span class="n">num_classes</span><span class="p">,</span> <span class="n">loss</span><span class="p">,</span> <span class="p">[</span><span class="mi">4</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">4</span><span class="p">],</span> <span class="p">[</span><span class="mi">24</span><span class="p">,</span> <span class="mi">176</span><span class="p">,</span> <span class="mi">352</span><span class="p">,</span> <span class="mi">704</span><span class="p">,</span> <span class="mi">1024</span><span class="p">],</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="k">if</span> <span class="n">pretrained</span><span class="p">:</span>
<span class="n">init_pretrained_weights</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">model_urls</span><span class="p">[</span><span class="s1">&#39;shufflenetv2_x1.5&#39;</span><span class="p">])</span>
<span class="k">return</span> <span class="n">model</span>
<span class="k">def</span> <span class="nf">shufflenet_v2_x2_0</span><span class="p">(</span><span class="n">num_classes</span><span class="p">,</span> <span class="n">loss</span><span class="o">=</span><span class="s1">&#39;softmax&#39;</span><span class="p">,</span> <span class="n">pretrained</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="n">model</span> <span class="o">=</span> <span class="n">ShuffleNetV2</span><span class="p">(</span><span class="n">num_classes</span><span class="p">,</span> <span class="n">loss</span><span class="p">,</span> <span class="p">[</span><span class="mi">4</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">4</span><span class="p">],</span> <span class="p">[</span><span class="mi">24</span><span class="p">,</span> <span class="mi">244</span><span class="p">,</span> <span class="mi">488</span><span class="p">,</span> <span class="mi">976</span><span class="p">,</span> <span class="mi">2048</span><span class="p">],</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="k">if</span> <span class="n">pretrained</span><span class="p">:</span>
<span class="n">init_pretrained_weights</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">model_urls</span><span class="p">[</span><span class="s1">&#39;shufflenetv2_x2.0&#39;</span><span class="p">])</span>
<span class="k">return</span> <span class="n">model</span>
</pre></div>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>
&copy; Copyright 2019, Kaiyang Zhou
</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/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>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.models.squeezenet &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.models.squeezenet &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>
@ -165,7 +165,10 @@
<div itemprop="articleBody">
<h1>Source code for torchreid.models.squeezenet</h1><div class="highlight"><pre>
<span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">absolute_import</span>
<span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Code source: https://github.com/pytorch/vision</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">absolute_import</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">division</span>
<span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.models.xception &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.models.xception &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.optim.lr_scheduler &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.optim.lr_scheduler &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.optim.optimizer &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.optim.optimizer &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.utils.avgmeter &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.utils.avgmeter &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.utils.loggers &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.utils.loggers &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.utils.model_complexity &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.utils.model_complexity &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.utils.reidtools &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.utils.reidtools &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.utils.tools &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.utils.tools &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>
@ -170,7 +170,7 @@
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">division</span>
<span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;mkdir_if_missing&#39;</span><span class="p">,</span> <span class="s1">&#39;check_isfile&#39;</span><span class="p">,</span> <span class="s1">&#39;read_json&#39;</span><span class="p">,</span> <span class="s1">&#39;write_json&#39;</span><span class="p">,</span>
<span class="s1">&#39;set_random_seed&#39;</span><span class="p">,</span> <span class="s1">&#39;download_url&#39;</span><span class="p">,</span> <span class="s1">&#39;read_image&#39;</span><span class="p">]</span>
<span class="s1">&#39;set_random_seed&#39;</span><span class="p">,</span> <span class="s1">&#39;download_url&#39;</span><span class="p">,</span> <span class="s1">&#39;read_image&#39;</span><span class="p">,</span> <span class="s1">&#39;collect_env_info&#39;</span><span class="p">]</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">import</span> <span class="nn">os</span>
@ -182,6 +182,7 @@
<span class="kn">import</span> <span class="nn">warnings</span>
<span class="kn">import</span> <span class="nn">random</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="kn">import</span> <span class="nn">PIL</span>
<span class="kn">from</span> <span class="nn">PIL</span> <span class="k">import</span> <span class="n">Image</span>
<span class="kn">import</span> <span class="nn">torch</span>
@ -281,6 +282,17 @@
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;IOError incurred when reading &quot;</span><span class="si">{}</span><span class="s1">&quot;. Will redo. Don</span><span class="se">\&#39;</span><span class="s1">t worry. Just chill.&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">img_path</span><span class="p">))</span>
<span class="k">pass</span>
<span class="k">return</span> <span class="n">img</span></div>
<div class="viewcode-block" id="collect_env_info"><a class="viewcode-back" href="../../../pkg/utils.html#torchreid.utils.tools.collect_env_info">[docs]</a><span class="k">def</span> <span class="nf">collect_env_info</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;Returns env info as a string.</span>
<span class="sd"> Code source: github.com/facebookresearch/maskrcnn-benchmark</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">torch.utils.collect_env</span> <span class="k">import</span> <span class="n">get_pretty_env_info</span>
<span class="n">env_str</span> <span class="o">=</span> <span class="n">get_pretty_env_info</span><span class="p">()</span>
<span class="n">env_str</span> <span class="o">+=</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1"> Pillow (</span><span class="si">{}</span><span class="s1">)&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">PIL</span><span class="o">.</span><span class="n">__version__</span><span class="p">)</span>
<span class="k">return</span> <span class="n">env_str</span></div>
</pre></div>
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.utils.torchtools &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.utils.torchtools &mdash; torchreid 0.7.7 documentation</title>
@ -59,7 +59,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -14,7 +14,6 @@ ImageNet Classification Models
-------------------------------
.. autoclass:: torchreid.models.resnet.ResNet
.. autoclass:: torchreid.models.resnext.ResNeXt
.. autoclass:: torchreid.models.senet.SENet
.. autoclass:: torchreid.models.densenet.DenseNet
.. autoclass:: torchreid.models.inceptionresnetv2.InceptionResNetV2
@ -29,6 +28,7 @@ Lightweight Models
.. autoclass:: torchreid.models.mobilenetv2.MobileNetV2
.. autoclass:: torchreid.models.shufflenet.ShuffleNet
.. autoclass:: torchreid.models.squeezenet.SqueezeNet
.. autoclass:: torchreid.models.shufflenetv2.ShuffleNetV2
ReID-specific Models

View File

@ -1,6 +1,6 @@
var DOCUMENTATION_OPTIONS = {
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
VERSION: '0.7.6',
VERSION: '0.7.7',
LANGUAGE: 'None',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Datasets &mdash; torchreid 0.7.6 documentation</title>
<title>Datasets &mdash; torchreid 0.7.7 documentation</title>
@ -61,7 +61,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Evaluation &mdash; torchreid 0.7.6 documentation</title>
<title>Evaluation &mdash; torchreid 0.7.7 documentation</title>
@ -61,7 +61,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -9,7 +9,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Index &mdash; torchreid 0.7.6 documentation</title>
<title>Index &mdash; torchreid 0.7.7 documentation</title>
@ -60,7 +60,7 @@
<div class="version">
0.7.6
0.7.7
</div>
@ -227,6 +227,8 @@
<li><a href="pkg/data.html#torchreid.data.datasets.dataset.Dataset.check_before_run">check_before_run() (torchreid.data.datasets.dataset.Dataset method)</a>
</li>
<li><a href="pkg/utils.html#torchreid.utils.tools.check_isfile">check_isfile() (in module torchreid.utils.tools)</a>
</li>
<li><a href="pkg/utils.html#torchreid.utils.tools.collect_env_info">collect_env_info() (in module torchreid.utils.tools)</a>
</li>
<li><a href="pkg/data.html#torchreid.data.transforms.ColorAugmentation">ColorAugmentation (class in torchreid.data.transforms)</a>
</li>
@ -236,10 +238,10 @@
<li><a href="pkg/data.html#torchreid.data.datasets.video.mars.Mars.combine_all">(torchreid.data.datasets.video.mars.Mars method)</a>
</li>
</ul></li>
<li><a href="pkg/metrics.html#torchreid.metrics.distance.compute_distance_matrix">compute_distance_matrix() (in module torchreid.metrics.distance)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pkg/metrics.html#torchreid.metrics.distance.compute_distance_matrix">compute_distance_matrix() (in module torchreid.metrics.distance)</a>
</li>
<li><a href="pkg/utils.html#torchreid.utils.model_complexity.compute_model_complexity">compute_model_complexity() (in module torchreid.utils.model_complexity)</a>
</li>
<li><a href="pkg/metrics.html#torchreid.metrics.distance.cosine_distance">cosine_distance() (in module torchreid.metrics.distance)</a>
@ -457,8 +459,6 @@
<li><a href="pkg/models.html#torchreid.models.resnet.ResNet">ResNet (class in torchreid.models.resnet)</a>
</li>
<li><a href="pkg/models.html#torchreid.models.resnetmid.ResNetMid">ResNetMid (class in torchreid.models.resnetmid)</a>
</li>
<li><a href="pkg/models.html#torchreid.models.resnext.ResNeXt">ResNeXt (class in torchreid.models.resnext)</a>
</li>
<li><a href="pkg/utils.html#torchreid.utils.torchtools.resume_from_checkpoint">resume_from_checkpoint() (in module torchreid.utils.torchtools)</a>
</li>
@ -495,6 +495,8 @@
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pkg/models.html#torchreid.models.shufflenet.ShuffleNet">ShuffleNet (class in torchreid.models.shufflenet)</a>
</li>
<li><a href="pkg/models.html#torchreid.models.shufflenetv2.ShuffleNetV2">ShuffleNetV2 (class in torchreid.models.shufflenetv2)</a>
</li>
<li><a href="pkg/models.html#torchreid.models.squeezenet.SqueezeNet">SqueezeNet (class in torchreid.models.squeezenet)</a>
</li>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Torchreid &mdash; torchreid 0.7.6 documentation</title>
<title>Torchreid &mdash; torchreid 0.7.7 documentation</title>
@ -60,7 +60,7 @@
<div class="version">
0.7.6
0.7.7
</div>

Binary file not shown.

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.data &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.data &mdash; torchreid 0.7.7 documentation</title>
@ -61,7 +61,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.engine &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.engine &mdash; torchreid 0.7.7 documentation</title>
@ -61,7 +61,7 @@
<div class="version">
0.7.6
0.7.7
</div>
@ -210,7 +210,7 @@ or <code class="docutils literal notranslate"><span class="pre">torchreid.data.V
<li><strong>max_epoch</strong> (<em>int</em>) maximum epoch.</li>
<li><strong>start_epoch</strong> (<em>int</em><em>, </em><em>optional</em>) starting epoch. Default is 0.</li>
<li><strong>fixbase_epoch</strong> (<em>int</em><em>, </em><em>optional</em>) number of epochs to train <code class="docutils literal notranslate"><span class="pre">open_layers</span></code> (new layers)
while keeping base layers frozen. Default is 0. <code class="docutils literal notranslate"><span class="pre">fixbase_epoch</span></code> is not counted
while keeping base layers frozen. Default is 0. <code class="docutils literal notranslate"><span class="pre">fixbase_epoch</span></code> is counted
in <code class="docutils literal notranslate"><span class="pre">max_epoch</span></code>.</li>
<li><strong>open_layers</strong> (<em>str</em><em> or </em><em>list</em><em>, </em><em>optional</em>) layers (attribute names) open for training.</li>
<li><strong>start_eval</strong> (<em>int</em><em>, </em><em>optional</em>) from which epoch to start evaluation. Default is 0.</li>
@ -363,23 +363,17 @@ or <code class="docutils literal notranslate"><span class="pre">torchreid.data.V
</div>
<dl class="method">
<dt id="torchreid.engine.image.softmax.ImageSoftmaxEngine.train">
<code class="descname">train</code><span class="sig-paren">(</span><em>epoch</em>, <em>trainloader</em>, <em>fixbase=False</em>, <em>open_layers=None</em>, <em>print_freq=10</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/torchreid/engine/image/softmax.html#ImageSoftmaxEngine.train"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#torchreid.engine.image.softmax.ImageSoftmaxEngine.train" title="Permalink to this definition"></a></dt>
<dd><p>Trains the model for one epoch on source datasets using softmax loss.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
<li><strong>epoch</strong> (<em>int</em>) current epoch.</li>
<li><strong>trainloader</strong> (<em>Dataloader</em>) training dataloader.</li>
<li><strong>fixbase</strong> (<em>bool</em><em>, </em><em>optional</em>) whether to fix base layers. Default is False.</li>
<li><strong>open_layers</strong> (<em>str</em><em> or </em><em>list</em><em>, </em><em>optional</em>) layers open for training.</li>
<li><strong>print_freq</strong> (<em>int</em><em>, </em><em>optional</em>) print frequency. Default is 10.</li>
</ul>
</td>
</tr>
</tbody>
</table>
<code class="descname">train</code><span class="sig-paren">(</span><em>epoch</em>, <em>max_epoch</em>, <em>trainloader</em>, <em>fixbase_epoch=0</em>, <em>open_layers=None</em>, <em>print_freq=10</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/torchreid/engine/image/softmax.html#ImageSoftmaxEngine.train"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#torchreid.engine.image.softmax.ImageSoftmaxEngine.train" title="Permalink to this definition"></a></dt>
<dd><p>Performs training on source datasets for one epoch.</p>
<p>This will be called every epoch in <code class="docutils literal notranslate"><span class="pre">run()</span></code>, e.g.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">for</span> <span class="n">epoch</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">start_epoch</span><span class="p">,</span> <span class="n">max_epoch</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">train</span><span class="p">(</span><span class="n">some_arguments</span><span class="p">)</span>
</pre></div>
</div>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">This needs to be implemented in subclasses.</p>
</div>
</dd></dl>
</dd></dl>
@ -448,23 +442,17 @@ or <code class="docutils literal notranslate"><span class="pre">torchreid.data.V
</div>
<dl class="method">
<dt id="torchreid.engine.image.triplet.ImageTripletEngine.train">
<code class="descname">train</code><span class="sig-paren">(</span><em>epoch</em>, <em>trainloader</em>, <em>fixbase=False</em>, <em>open_layers=None</em>, <em>print_freq=10</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/torchreid/engine/image/triplet.html#ImageTripletEngine.train"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#torchreid.engine.image.triplet.ImageTripletEngine.train" title="Permalink to this definition"></a></dt>
<dd><p>Trains the model for one epoch on source datasets using hard mining triplet loss.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
<li><strong>epoch</strong> (<em>int</em>) current epoch.</li>
<li><strong>trainloader</strong> (<em>Dataloader</em>) training dataloader.</li>
<li><strong>fixbase</strong> (<em>bool</em><em>, </em><em>optional</em>) whether to fix base layers. Default is False.</li>
<li><strong>open_layers</strong> (<em>str</em><em> or </em><em>list</em><em>, </em><em>optional</em>) layers open for training.</li>
<li><strong>print_freq</strong> (<em>int</em><em>, </em><em>optional</em>) print frequency. Default is 10.</li>
</ul>
</td>
</tr>
</tbody>
</table>
<code class="descname">train</code><span class="sig-paren">(</span><em>epoch</em>, <em>max_epoch</em>, <em>trainloader</em>, <em>fixbase_epoch=0</em>, <em>open_layers=None</em>, <em>print_freq=10</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/torchreid/engine/image/triplet.html#ImageTripletEngine.train"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#torchreid.engine.image.triplet.ImageTripletEngine.train" title="Permalink to this definition"></a></dt>
<dd><p>Performs training on source datasets for one epoch.</p>
<p>This will be called every epoch in <code class="docutils literal notranslate"><span class="pre">run()</span></code>, e.g.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">for</span> <span class="n">epoch</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">start_epoch</span><span class="p">,</span> <span class="n">max_epoch</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">train</span><span class="p">(</span><span class="n">some_arguments</span><span class="p">)</span>
</pre></div>
</div>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">This needs to be implemented in subclasses.</p>
</div>
</dd></dl>
</dd></dl>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.losses &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.losses &mdash; torchreid 0.7.7 documentation</title>
@ -61,7 +61,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.metrics &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.metrics &mdash; torchreid 0.7.7 documentation</title>
@ -61,7 +61,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.models &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.models &mdash; torchreid 0.7.7 documentation</title>
@ -61,7 +61,7 @@
<div class="version">
0.7.6
0.7.7
</div>
@ -231,11 +231,15 @@ Default is True.</li>
<h2>ImageNet Classification Models<a class="headerlink" href="#imagenet-classification-models" title="Permalink to this headline"></a></h2>
<dl class="class">
<dt id="torchreid.models.resnet.ResNet">
<em class="property">class </em><code class="descclassname">torchreid.models.resnet.</code><code class="descname">ResNet</code><span class="sig-paren">(</span><em>num_classes</em>, <em>loss</em>, <em>block</em>, <em>layers</em>, <em>last_stride=2</em>, <em>fc_dims=None</em>, <em>dropout_p=None</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/torchreid/models/resnet.html#ResNet"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#torchreid.models.resnet.ResNet" title="Permalink to this definition"></a></dt>
<em class="property">class </em><code class="descclassname">torchreid.models.resnet.</code><code class="descname">ResNet</code><span class="sig-paren">(</span><em>num_classes</em>, <em>loss</em>, <em>block</em>, <em>layers</em>, <em>zero_init_residual=False</em>, <em>groups=1</em>, <em>width_per_group=64</em>, <em>replace_stride_with_dilation=None</em>, <em>norm_layer=None</em>, <em>last_stride=2</em>, <em>fc_dims=None</em>, <em>dropout_p=None</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/torchreid/models/resnet.html#ResNet"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#torchreid.models.resnet.ResNet" title="Permalink to this definition"></a></dt>
<dd><p>Residual network.</p>
<dl class="docutils">
<dt>Reference:</dt>
<dd>He et al. Deep Residual Learning for Image Recognition. CVPR 2016.</dd>
<dd><ul class="first last simple">
<li>He et al. Deep Residual Learning for Image Recognition. CVPR 2016.</li>
<li>Xie et al. Aggregated Residual Transformations for Deep Neural Networks. CVPR 2017.</li>
</ul>
</dd>
<dt>Public keys:</dt>
<dd><ul class="first last simple">
<li><code class="docutils literal notranslate"><span class="pre">resnet18</span></code>: ResNet18.</li>
@ -243,29 +247,14 @@ Default is True.</li>
<li><code class="docutils literal notranslate"><span class="pre">resnet50</span></code>: ResNet50.</li>
<li><code class="docutils literal notranslate"><span class="pre">resnet101</span></code>: ResNet101.</li>
<li><code class="docutils literal notranslate"><span class="pre">resnet152</span></code>: ResNet152.</li>
<li><code class="docutils literal notranslate"><span class="pre">resnext50_32x4d</span></code>: ResNeXt50.</li>
<li><code class="docutils literal notranslate"><span class="pre">resnext101_32x8d</span></code>: ResNeXt101.</li>
<li><code class="docutils literal notranslate"><span class="pre">resnet50_fc512</span></code>: ResNet50 + FC.</li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="class">
<dt id="torchreid.models.resnext.ResNeXt">
<em class="property">class </em><code class="descclassname">torchreid.models.resnext.</code><code class="descname">ResNeXt</code><span class="sig-paren">(</span><em>num_classes</em>, <em>loss</em>, <em>block</em>, <em>layers</em>, <em>groups=32</em>, <em>base_width=4</em>, <em>last_stride=2</em>, <em>fc_dims=None</em>, <em>dropout_p=None</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/torchreid/models/resnext.html#ResNeXt"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#torchreid.models.resnext.ResNeXt" title="Permalink to this definition"></a></dt>
<dd><p>ResNeXt.</p>
<dl class="docutils">
<dt>Reference:</dt>
<dd>Xie et al. Aggregated Residual Transformations for Deep
Neural Networks. CVPR 2017.</dd>
<dt>Public keys:</dt>
<dd><ul class="first last simple">
<li><code class="docutils literal notranslate"><span class="pre">resnext50_32x4d</span></code>: ResNeXt50 (groups=32, width=4).</li>
<li><code class="docutils literal notranslate"><span class="pre">resnext50_32x4d_fc512</span></code> ResNeXt50 (groups=32, width=4) + FC.</li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="class">
<dt id="torchreid.models.senet.SENet">
<em class="property">class </em><code class="descclassname">torchreid.models.senet.</code><code class="descname">SENet</code><span class="sig-paren">(</span><em>num_classes</em>, <em>loss</em>, <em>block</em>, <em>layers</em>, <em>groups</em>, <em>reduction</em>, <em>dropout_p=0.2</em>, <em>inplanes=128</em>, <em>input_3x3=True</em>, <em>downsample_kernel_size=3</em>, <em>downsample_padding=1</em>, <em>last_stride=2</em>, <em>fc_dims=None</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/torchreid/models/senet.html#SENet"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#torchreid.models.senet.SENet" title="Permalink to this definition"></a></dt>
@ -424,6 +413,24 @@ and&lt; 0.5 MB model size. arXiv:1602.07360.</dd>
</dl>
</dd></dl>
<dl class="class">
<dt id="torchreid.models.shufflenetv2.ShuffleNetV2">
<em class="property">class </em><code class="descclassname">torchreid.models.shufflenetv2.</code><code class="descname">ShuffleNetV2</code><span class="sig-paren">(</span><em>num_classes</em>, <em>loss</em>, <em>stages_repeats</em>, <em>stages_out_channels</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/torchreid/models/shufflenetv2.html#ShuffleNetV2"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#torchreid.models.shufflenetv2.ShuffleNetV2" title="Permalink to this definition"></a></dt>
<dd><p>ShuffleNetV2.</p>
<dl class="docutils">
<dt>Reference:</dt>
<dd>Ma et al. ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design. ECCV 2018.</dd>
<dt>Public keys:</dt>
<dd><ul class="first last simple">
<li><code class="docutils literal notranslate"><span class="pre">shufflenet_v2_x0_5</span></code>: ShuffleNetV2 x0.5.</li>
<li><code class="docutils literal notranslate"><span class="pre">shufflenet_v2_x1_0</span></code>: ShuffleNetV2 x1.0.</li>
<li><code class="docutils literal notranslate"><span class="pre">shufflenet_v2_x1_5</span></code>: ShuffleNetV2 x1.5.</li>
<li><code class="docutils literal notranslate"><span class="pre">shufflenet_v2_x2_0</span></code>: ShuffleNetV2 x2.0.</li>
</ul>
</dd>
</dl>
</dd></dl>
</div>
<div class="section" id="reid-specific-models">
<h2>ReID-specific Models<a class="headerlink" href="#reid-specific-models" title="Permalink to this headline"></a></h2>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.optim &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.optim &mdash; torchreid 0.7.7 documentation</title>
@ -61,7 +61,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>torchreid.utils &mdash; torchreid 0.7.6 documentation</title>
<title>torchreid.utils &mdash; torchreid 0.7.7 documentation</title>
@ -61,7 +61,7 @@
<div class="version">
0.7.6
0.7.7
</div>
@ -382,6 +382,13 @@ to show the summarized results, which are convenient for analysis.</p>
</table>
</dd></dl>
<dl class="function">
<dt id="torchreid.utils.tools.collect_env_info">
<code class="descclassname">torchreid.utils.tools.</code><code class="descname">collect_env_info</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/torchreid/utils/tools.html#collect_env_info"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#torchreid.utils.tools.collect_env_info" title="Permalink to this definition"></a></dt>
<dd><p>Returns env info as a string.</p>
<p>Code source: github.com/facebookresearch/maskrcnn-benchmark</p>
</dd></dl>
</div>
<div class="section" id="module-torchreid.utils.reidtools">
<span id="reid-tools"></span><h2>ReID Tools<a class="headerlink" href="#module-torchreid.utils.reidtools" title="Permalink to this headline"></a></h2>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Python Module Index &mdash; torchreid 0.7.6 documentation</title>
<title>Python Module Index &mdash; torchreid 0.7.7 documentation</title>
@ -62,7 +62,7 @@
<div class="version">
0.7.6
0.7.7
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Search &mdash; torchreid 0.7.6 documentation</title>
<title>Search &mdash; torchreid 0.7.7 documentation</title>
@ -60,7 +60,7 @@
<div class="version">
0.7.6
0.7.7
</div>

File diff suppressed because one or more lines are too long

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>How-to &mdash; torchreid 0.7.6 documentation</title>
<title>How-to &mdash; torchreid 0.7.7 documentation</title>
@ -61,7 +61,7 @@
<div class="version">
0.7.6
0.7.7
</div>