Source code for torchreid.models.densenet
-from __future__ import absolute_import
+"""
+Code source: https://github.com/pytorch/vision
+"""
+from __future__ import absolute_import
from __future__ import division
__all__ = ['densenet121', 'densenet169', 'densenet201', 'densenet161', 'densenet121_fc512']
diff --git a/_modules/torchreid/models/hacnn.html b/_modules/torchreid/models/hacnn.html
index fd21a28..511a4b1 100644
--- a/_modules/torchreid/models/hacnn.html
+++ b/_modules/torchreid/models/hacnn.html
@@ -8,7 +8,7 @@
- torchreid.models.hacnn — torchreid 0.7.6 documentation
+ torchreid.models.hacnn — torchreid 0.7.7 documentation
@@ -59,7 +59,7 @@
- 0.7.6
+ 0.7.7
diff --git a/_modules/torchreid/models/inceptionresnetv2.html b/_modules/torchreid/models/inceptionresnetv2.html
index d0a4fe1..a19f22f 100644
--- a/_modules/torchreid/models/inceptionresnetv2.html
+++ b/_modules/torchreid/models/inceptionresnetv2.html
@@ -8,7 +8,7 @@
- torchreid.models.inceptionresnetv2 — torchreid 0.7.6 documentation
+ torchreid.models.inceptionresnetv2 — torchreid 0.7.7 documentation
@@ -59,7 +59,7 @@
- 0.7.6
+ 0.7.7
diff --git a/_modules/torchreid/models/inceptionv4.html b/_modules/torchreid/models/inceptionv4.html
index 3b185f4..5612e02 100644
--- a/_modules/torchreid/models/inceptionv4.html
+++ b/_modules/torchreid/models/inceptionv4.html
@@ -8,7 +8,7 @@
- torchreid.models.inceptionv4 — torchreid 0.7.6 documentation
+ torchreid.models.inceptionv4 — torchreid 0.7.7 documentation
@@ -59,7 +59,7 @@
- 0.7.6
+ 0.7.7
diff --git a/_modules/torchreid/models/mlfn.html b/_modules/torchreid/models/mlfn.html
index 345b606..edad60e 100644
--- a/_modules/torchreid/models/mlfn.html
+++ b/_modules/torchreid/models/mlfn.html
@@ -8,7 +8,7 @@
- torchreid.models.mlfn — torchreid 0.7.6 documentation
+ torchreid.models.mlfn — torchreid 0.7.7 documentation
@@ -59,7 +59,7 @@
- 0.7.6
+ 0.7.7
diff --git a/_modules/torchreid/models/mobilenetv2.html b/_modules/torchreid/models/mobilenetv2.html
index 4283987..67ea4a1 100644
--- a/_modules/torchreid/models/mobilenetv2.html
+++ b/_modules/torchreid/models/mobilenetv2.html
@@ -8,7 +8,7 @@
- torchreid.models.mobilenetv2 — torchreid 0.7.6 documentation
+ torchreid.models.mobilenetv2 — torchreid 0.7.7 documentation
@@ -59,7 +59,7 @@
- 0.7.6
+ 0.7.7
diff --git a/_modules/torchreid/models/mudeep.html b/_modules/torchreid/models/mudeep.html
index 64555b8..78ebb2e 100644
--- a/_modules/torchreid/models/mudeep.html
+++ b/_modules/torchreid/models/mudeep.html
@@ -8,7 +8,7 @@
- torchreid.models.mudeep — torchreid 0.7.6 documentation
+ torchreid.models.mudeep — torchreid 0.7.7 documentation
@@ -59,7 +59,7 @@
- 0.7.6
+ 0.7.7
diff --git a/_modules/torchreid/models/nasnet.html b/_modules/torchreid/models/nasnet.html
index c6e3af3..44edac2 100644
--- a/_modules/torchreid/models/nasnet.html
+++ b/_modules/torchreid/models/nasnet.html
@@ -8,7 +8,7 @@
- torchreid.models.nasnet — torchreid 0.7.6 documentation
+ torchreid.models.nasnet — torchreid 0.7.7 documentation
@@ -59,7 +59,7 @@
- 0.7.6
+ 0.7.7
diff --git a/_modules/torchreid/models/pcb.html b/_modules/torchreid/models/pcb.html
index 3ef2582..3073829 100644
--- a/_modules/torchreid/models/pcb.html
+++ b/_modules/torchreid/models/pcb.html
@@ -8,7 +8,7 @@
- torchreid.models.pcb — torchreid 0.7.6 documentation
+ torchreid.models.pcb — torchreid 0.7.7 documentation
@@ -59,7 +59,7 @@
- 0.7.6
+ 0.7.7
diff --git a/_modules/torchreid/models/resnet.html b/_modules/torchreid/models/resnet.html
index 99e3706..45418de 100644
--- a/_modules/torchreid/models/resnet.html
+++ b/_modules/torchreid/models/resnet.html
@@ -8,7 +8,7 @@
- torchreid.models.resnet — torchreid 0.7.6 documentation
+ torchreid.models.resnet — torchreid 0.7.7 documentation
@@ -59,7 +59,7 @@
- 0.7.6
+ 0.7.7
@@ -165,10 +165,14 @@
Source code for torchreid.models.resnet
-from __future__ import absolute_import
+"""
+Code source: https://github.com/pytorch/vision
+"""
+from __future__ import absolute_import
from __future__ import division
-__all__ = ['resnet18', 'resnet34', 'resnet50', 'resnet101', 'resnet152', 'resnet50_fc512']
+__all__ = ['resnet18', 'resnet34', 'resnet50', 'resnet101', 'resnet152', 'resnext50_32x4d',
+ 'resnext101_32x8d', 'resnet50_fc512']
import torch
from torch import nn
@@ -183,30 +187,45 @@
'resnet50': 'https://download.pytorch.org/models/resnet50-19c8e357.pth',
'resnet101': 'https://download.pytorch.org/models/resnet101-5d3b4d8f.pth',
'resnet152': 'https://download.pytorch.org/models/resnet152-b121ed2d.pth',
+ 'resnext50_32x4d': 'https://download.pytorch.org/models/resnext50_32x4d-7cdf4587.pth',
+ 'resnext101_32x8d': 'https://download.pytorch.org/models/resnext101_32x8d-8ba56ff5.pth',
}
-def conv3x3(in_planes, out_planes, stride=1):
+def conv3x3(in_planes, out_planes, stride=1, groups=1, dilation=1):
"""3x3 convolution with padding"""
return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride,
- padding=1, bias=False)
+ padding=dilation, groups=groups, bias=False, dilation=dilation)
+
+
+def conv1x1(in_planes, out_planes, stride=1):
+ """1x1 convolution"""
+ return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False)
class BasicBlock(nn.Module):
expansion = 1
- def __init__(self, inplanes, planes, stride=1, downsample=None):
+ def __init__(self, inplanes, planes, stride=1, downsample=None, groups=1,
+ base_width=64, dilation=1, norm_layer=None):
super(BasicBlock, self).__init__()
+ if norm_layer is None:
+ norm_layer = nn.BatchNorm2d
+ if groups != 1 or base_width != 64:
+ raise ValueError('BasicBlock only supports groups=1 and base_width=64')
+ if dilation > 1:
+ raise NotImplementedError("Dilation > 1 not supported in BasicBlock")
+ # Both self.conv1 and self.downsample layers downsample the input when stride != 1
self.conv1 = conv3x3(inplanes, planes, stride)
- self.bn1 = nn.BatchNorm2d(planes)
+ self.bn1 = norm_layer(planes)
self.relu = nn.ReLU(inplace=True)
self.conv2 = conv3x3(planes, planes)
- self.bn2 = nn.BatchNorm2d(planes)
+ self.bn2 = norm_layer(planes)
self.downsample = downsample
self.stride = stride
def forward(self, x):
- residual = x
+ identity = x
out = self.conv1(x)
out = self.bn1(out)
@@ -216,9 +235,9 @@
out = self.bn2(out)
if self.downsample is not None:
- residual = self.downsample(x)
+ identity = self.downsample(x)
- out += residual
+ out += identity
out = self.relu(out)
return out
@@ -227,21 +246,25 @@
class Bottleneck(nn.Module):
expansion = 4
- def __init__(self, inplanes, planes, stride=1, downsample=None):
+ def __init__(self, inplanes, planes, stride=1, downsample=None, groups=1,
+ base_width=64, dilation=1, norm_layer=None):
super(Bottleneck, self).__init__()
- self.conv1 = nn.Conv2d(inplanes, planes, kernel_size=1, bias=False)
- self.bn1 = nn.BatchNorm2d(planes)
- self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, stride=stride,
- padding=1, bias=False)
- self.bn2 = nn.BatchNorm2d(planes)
- self.conv3 = nn.Conv2d(planes, planes * self.expansion, kernel_size=1, bias=False)
- self.bn3 = nn.BatchNorm2d(planes * self.expansion)
+ if norm_layer is None:
+ norm_layer = nn.BatchNorm2d
+ width = int(planes * (base_width / 64.)) * groups
+ # Both self.conv2 and self.downsample layers downsample the input when stride != 1
+ self.conv1 = conv1x1(inplanes, width)
+ self.bn1 = norm_layer(width)
+ self.conv2 = conv3x3(width, width, stride, groups, dilation)
+ self.bn2 = norm_layer(width)
+ self.conv3 = conv1x1(width, planes * self.expansion)
+ self.bn3 = norm_layer(planes * self.expansion)
self.relu = nn.ReLU(inplace=True)
self.downsample = downsample
self.stride = stride
def forward(self, x):
- residual = x
+ identity = x
out = self.conv1(x)
out = self.bn1(out)
@@ -255,9 +278,9 @@
out = self.bn3(out)
if self.downsample is not None:
- residual = self.downsample(x)
+ identity = self.downsample(x)
- out += residual
+ out += identity
out = self.relu(out)
return out
@@ -267,7 +290,8 @@
"""Residual network.
Reference:
- He et al. Deep Residual Learning for Image Recognition. CVPR 2016.
+ - He et al. Deep Residual Learning for Image Recognition. CVPR 2016.
+ - Xie et al. Aggregated Residual Transformations for Deep Neural Networks. CVPR 2017.
Public keys:
- ``resnet18``: ResNet18.
@@ -275,49 +299,80 @@
- ``resnet50``: ResNet50.
- ``resnet101``: ResNet101.
- ``resnet152``: ResNet152.
+ - ``resnext50_32x4d``: ResNeXt50.
+ - ``resnext101_32x8d``: ResNeXt101.
- ``resnet50_fc512``: ResNet50 + FC.
"""
-
- def __init__(self, num_classes, loss, block, layers,
- last_stride=2,
- fc_dims=None,
- dropout_p=None,
- **kwargs):
- self.inplanes = 64
+
+ def __init__(self, num_classes, loss, block, layers, zero_init_residual=False,
+ groups=1, width_per_group=64, replace_stride_with_dilation=None,
+ norm_layer=None, last_stride=2, fc_dims=None, dropout_p=None, **kwargs):
super(ResNet, self).__init__()
+ if norm_layer is None:
+ norm_layer = nn.BatchNorm2d
+ self._norm_layer = norm_layer
self.loss = loss
self.feature_dim = 512 * block.expansion
-
- # backbone network
- self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3, bias=False)
- self.bn1 = nn.BatchNorm2d(64)
+ self.inplanes = 64
+ self.dilation = 1
+ if replace_stride_with_dilation is None:
+ # each element in the tuple indicates if we should replace
+ # the 2x2 stride with a dilated convolution instead
+ replace_stride_with_dilation = [False, False, False]
+ if len(replace_stride_with_dilation) != 3:
+ raise ValueError("replace_stride_with_dilation should be None "
+ "or a 3-element tuple, got {}".format(replace_stride_with_dilation))
+ self.groups = groups
+ self.base_width = width_per_group
+ self.conv1 = nn.Conv2d(3, self.inplanes, kernel_size=7, stride=2, padding=3,
+ bias=False)
+ self.bn1 = norm_layer(self.inplanes)
self.relu = nn.ReLU(inplace=True)
self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)
self.layer1 = self._make_layer(block, 64, layers[0])
- self.layer2 = self._make_layer(block, 128, layers[1], stride=2)
- self.layer3 = self._make_layer(block, 256, layers[2], stride=2)
- self.layer4 = self._make_layer(block, 512, layers[3], stride=last_stride)
-
- self.global_avgpool = nn.AdaptiveAvgPool2d(1)
+ self.layer2 = self._make_layer(block, 128, layers[1], stride=2,
+ dilate=replace_stride_with_dilation[0])
+ self.layer3 = self._make_layer(block, 256, layers[2], stride=2,
+ dilate=replace_stride_with_dilation[1])
+ self.layer4 = self._make_layer(block, 512, layers[3], stride=last_stride,
+ dilate=replace_stride_with_dilation[2])
+ self.global_avgpool = nn.AdaptiveAvgPool2d((1, 1))
self.fc = self._construct_fc_layer(fc_dims, 512 * block.expansion, dropout_p)
self.classifier = nn.Linear(self.feature_dim, num_classes)
self._init_params()
- def _make_layer(self, block, planes, blocks, stride=1):
+ # Zero-initialize the last BN in each residual branch,
+ # so that the residual branch starts with zeros, and each residual block behaves like an identity.
+ # This improves the model by 0.2~0.3% according to https://arxiv.org/abs/1706.02677
+ if zero_init_residual:
+ for m in self.modules():
+ if isinstance(m, Bottleneck):
+ nn.init.constant_(m.bn3.weight, 0)
+ elif isinstance(m, BasicBlock):
+ nn.init.constant_(m.bn2.weight, 0)
+
+ def _make_layer(self, block, planes, blocks, stride=1, dilate=False):
+ norm_layer = self._norm_layer
downsample = None
+ previous_dilation = self.dilation
+ if dilate:
+ self.dilation *= stride
+ stride = 1
if stride != 1 or self.inplanes != planes * block.expansion:
downsample = nn.Sequential(
- nn.Conv2d(self.inplanes, planes * block.expansion,
- kernel_size=1, stride=stride, bias=False),
- nn.BatchNorm2d(planes * block.expansion),
+ conv1x1(self.inplanes, planes * block.expansion, stride),
+ norm_layer(planes * block.expansion),
)
layers = []
- layers.append(block(self.inplanes, planes, stride, downsample))
+ layers.append(block(self.inplanes, planes, stride, downsample, self.groups,
+ self.base_width, previous_dilation, norm_layer))
self.inplanes = planes * block.expansion
- for i in range(1, blocks):
- layers.append(block(self.inplanes, planes))
+ for _ in range(1, blocks):
+ layers.append(block(self.inplanes, planes, groups=self.groups,
+ base_width=self.base_width, dilation=self.dilation,
+ norm_layer=norm_layer))
return nn.Sequential(*layers)
@@ -409,17 +464,7 @@
model.load_state_dict(model_dict)
-"""
-Residual network configurations:
---
-resnet18: block=BasicBlock, layers=[2, 2, 2, 2]
-resnet34: block=BasicBlock, layers=[3, 4, 6, 3]
-resnet50: block=Bottleneck, layers=[3, 4, 6, 3]
-resnet101: block=Bottleneck, layers=[3, 4, 23, 3]
-resnet152: block=Bottleneck, layers=[3, 8, 36, 3]
-"""
-
-
+"""ResNet"""
def resnet18(num_classes, loss='softmax', pretrained=True, **kwargs):
model = ResNet(
num_classes=num_classes,
@@ -500,8 +545,45 @@
return model
+"""ResNeXt"""
+def resnext50_32x4d(num_classes, loss='softmax', pretrained=True, **kwargs):
+ model = ResNet(
+ num_classes=num_classes,
+ loss=loss,
+ block=Bottleneck,
+ layers=[3, 4, 6, 3],
+ last_stride=2,
+ fc_dims=None,
+ dropout_p=None,
+ groups=32,
+ width_per_group=4,
+ **kwargs
+ )
+ if pretrained:
+ init_pretrained_weights(model, model_urls['resnext50_32x4d'])
+ return model
+
+
+def resnext101_32x8d(num_classes, loss='softmax', pretrained=True, **kwargs):
+ model = ResNet(
+ num_classes=num_classes,
+ loss=loss,
+ block=Bottleneck,
+ layers=[3, 4, 23, 3],
+ last_stride=2,
+ fc_dims=None,
+ dropout_p=None,
+ groups=32,
+ width_per_group=8,
+ **kwargs
+ )
+ if pretrained:
+ init_pretrained_weights(model, model_urls['resnext101_32x8d'])
+ return model
+
+
"""
-resnet + fc
+ResNet + FC
"""
def resnet50_fc512(num_classes, loss='softmax', pretrained=True, **kwargs):
model = ResNet(
diff --git a/_modules/torchreid/models/resnetmid.html b/_modules/torchreid/models/resnetmid.html
index 0e60e6f..6412fb4 100644
--- a/_modules/torchreid/models/resnetmid.html
+++ b/_modules/torchreid/models/resnetmid.html
@@ -8,7 +8,7 @@
- torchreid.models.resnetmid — torchreid 0.7.6 documentation
+ torchreid.models.resnetmid — torchreid 0.7.7 documentation
@@ -59,7 +59,7 @@
- 0.7.6
+ 0.7.7
diff --git a/_modules/torchreid/models/resnext.html b/_modules/torchreid/models/resnext.html
deleted file mode 100644
index 336955c..0000000
--- a/_modules/torchreid/models/resnext.html
+++ /dev/null
@@ -1,447 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- torchreid.models.resnext — torchreid 0.7.6 documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Source code for torchreid.models.resnext
-from __future__ import absolute_import
-from __future__ import division
-
-__all__ = ['resnext50_32x4d', 'resnext50_32x4d_fc512']
-
-import math
-
-import torch
-from torch import nn
-from torch.nn import functional as F
-import torchvision
-import torch.utils.model_zoo as model_zoo
-
-
-model_urls = {
- # top1 = 76.3
- 'resnext50_32x4d': 'http://www.eecs.qmul.ac.uk/~kz303/deep-person-reid/model-zoo/imagenet-pretrained/resnext50_32x4d-453b60f8.pth',
-}
-
-
-class ResNeXtBottleneck(nn.Module):
- expansion = 4
-
- def __init__(self, inplanes, planes, groups=32, base_width=4, stride=1, downsample=None):
- super(ResNeXtBottleneck, self).__init__()
- width = int(math.floor(planes * (base_width / 64.)) * groups)
- self.conv1 = nn.Conv2d(inplanes, width, kernel_size=1, bias=False, stride=1)
- self.bn1 = nn.BatchNorm2d(width)
- self.conv2 = nn.Conv2d(width, width, kernel_size=3, stride=stride, padding=1, groups=groups, bias=False)
- self.bn2 = nn.BatchNorm2d(width)
- self.conv3 = nn.Conv2d(width, planes * self.expansion, kernel_size=1, bias=False)
- self.bn3 = nn.BatchNorm2d(planes * self.expansion)
- self.relu = nn.ReLU(inplace=True)
- self.downsample = downsample
- self.stride = stride
-
- def forward(self, x):
- residual = x
-
- out = self.conv1(x)
- out = self.bn1(out)
- out = self.relu(out)
-
- out = self.conv2(out)
- out = self.bn2(out)
- out = self.relu(out)
-
- out = self.conv3(out)
- out = self.bn3(out)
-
- if self.downsample is not None:
- residual = self.downsample(x)
-
- out += residual
- out = self.relu(out)
-
- return out
-
-
-[docs]class ResNeXt(nn.Module):
- """ResNeXt.
-
- Reference:
- Xie et al. Aggregated Residual Transformations for Deep
- Neural Networks. CVPR 2017.
-
- Public keys:
- - ``resnext50_32x4d``: ResNeXt50 (groups=32, width=4).
- - ``resnext50_32x4d_fc512`` ResNeXt50 (groups=32, width=4) + FC.
- """
-
- def __init__(self, num_classes, loss, block, layers,
- groups=32,
- base_width=4,
- last_stride=2,
- fc_dims=None,
- dropout_p=None,
- **kwargs):
- self.inplanes = 64
- super(ResNeXt, self).__init__()
- self.loss = loss
- self.feature_dim = 512 * block.expansion
-
- # backbone network
- self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3, bias=False)
- self.bn1 = nn.BatchNorm2d(64)
- self.relu = nn.ReLU(inplace=True)
- self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)
- self.layer1 = self._make_layer(block, 64, layers[0], groups, base_width)
- self.layer2 = self._make_layer(block, 128, layers[1], groups, base_width, stride=2)
- self.layer3 = self._make_layer(block, 256, layers[2], groups, base_width, stride=2)
- self.layer4 = self._make_layer(block, 512, layers[3], groups, base_width, stride=last_stride)
-
- self.global_avgpool = nn.AdaptiveAvgPool2d(1)
- self.fc = self._construct_fc_layer(fc_dims, 512 * block.expansion, dropout_p)
- self.classifier = nn.Linear(self.feature_dim, num_classes)
-
- self._init_params()
-
- def _make_layer(self, block, planes, blocks, groups, base_width, stride=1):
- downsample = None
- if stride != 1 or self.inplanes != planes * block.expansion:
- downsample = nn.Sequential(
- nn.Conv2d(self.inplanes, planes * block.expansion,
- kernel_size=1, stride=stride, bias=False),
- nn.BatchNorm2d(planes * block.expansion),
- )
-
- layers = []
- layers.append(block(self.inplanes, planes, groups, base_width, stride, downsample))
- self.inplanes = planes * block.expansion
- for i in range(1, blocks):
- layers.append(block(self.inplanes, planes, groups, base_width))
-
- return nn.Sequential(*layers)
-
- def _construct_fc_layer(self, fc_dims, input_dim, dropout_p=None):
- """Constructs fully connected layer.
-
- Args:
- fc_dims (list or tuple): dimensions of fc layers, if None, no fc layers are constructed
- input_dim (int): input dimension
- dropout_p (float): dropout probability, if None, dropout is unused
- """
- if fc_dims is None:
- self.feature_dim = input_dim
- return None
-
- assert isinstance(fc_dims, (list, tuple)), 'fc_dims must be either list or tuple, but got {}'.format(type(fc_dims))
-
- layers = []
- for dim in fc_dims:
- layers.append(nn.Linear(input_dim, dim))
- layers.append(nn.BatchNorm1d(dim))
- layers.append(nn.ReLU(inplace=True))
- if dropout_p is not None:
- layers.append(nn.Dropout(p=dropout_p))
- input_dim = dim
-
- self.feature_dim = fc_dims[-1]
-
- return nn.Sequential(*layers)
-
- def _init_params(self):
- for m in self.modules():
- if isinstance(m, nn.Conv2d):
- nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')
- if m.bias is not None:
- nn.init.constant_(m.bias, 0)
- elif isinstance(m, nn.BatchNorm2d):
- nn.init.constant_(m.weight, 1)
- nn.init.constant_(m.bias, 0)
- elif isinstance(m, nn.BatchNorm1d):
- nn.init.constant_(m.weight, 1)
- nn.init.constant_(m.bias, 0)
- elif isinstance(m, nn.Linear):
- nn.init.normal_(m.weight, 0, 0.01)
- if m.bias is not None:
- nn.init.constant_(m.bias, 0)
-
- def featuremaps(self, x):
- x = self.conv1(x)
- x = self.bn1(x)
- x = self.relu(x)
- x = self.maxpool(x)
- x = self.layer1(x)
- x = self.layer2(x)
- x = self.layer3(x)
- x = self.layer4(x)
- return x
-
- def forward(self, x):
- f = self.featuremaps(x)
- v = self.global_avgpool(f)
- v = v.view(v.size(0), -1)
-
- if self.fc is not None:
- v = self.fc(v)
-
- if not self.training:
- return v
-
- y = self.classifier(v)
-
- if self.loss == 'softmax':
- return y
- elif self.loss == 'triplet':
- return y, v
- else:
- raise KeyError("Unsupported loss: {}".format(self.loss))
-
-
-def init_pretrained_weights(model, model_url):
- """Initializes model with pretrained weights.
-
- Layers that don't match with pretrained layers in name or size are kept unchanged.
- """
- pretrain_dict = model_zoo.load_url(model_url)
- model_dict = model.state_dict()
- pretrain_dict = {k: v for k, v in pretrain_dict.items() if k in model_dict and model_dict[k].size() == v.size()}
- model_dict.update(pretrain_dict)
- model.load_state_dict(model_dict)
-
-
-def resnext50_32x4d(num_classes, loss='softmax', pretrained=True, **kwargs):
- model = ResNeXt(
- num_classes=num_classes,
- loss=loss,
- block=ResNeXtBottleneck,
- layers=[3, 4, 6, 3],
- groups=32,
- base_width=4,
- last_stride=2,
- fc_dims=None,
- dropout_p=None,
- **kwargs
- )
- if pretrained:
- init_pretrained_weights(model, model_urls['resnext50_32x4d'])
- return model
-
-
-def resnext50_32x4d_fc512(num_classes, loss='softmax', pretrained=True, **kwargs):
- model = ResNeXt(
- num_classes=num_classes,
- loss=loss,
- block=ResNeXtBottleneck,
- layers=[3, 4, 6, 3],
- groups=32,
- base_width=4,
- last_stride=1,
- fc_dims=[512],
- dropout_p=None,
- **kwargs
- )
- if pretrained:
- init_pretrained_weights(model, model_urls['resnext50_32x4d'])
- return model
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/_modules/torchreid/models/senet.html b/_modules/torchreid/models/senet.html
index 03a414e..65de3e9 100644
--- a/_modules/torchreid/models/senet.html
+++ b/_modules/torchreid/models/senet.html
@@ -8,7 +8,7 @@
- torchreid.models.senet — torchreid 0.7.6 documentation
+ torchreid.models.senet — torchreid 0.7.7 documentation
@@ -59,7 +59,7 @@
- 0.7.6
+ 0.7.7
diff --git a/_modules/torchreid/models/shufflenet.html b/_modules/torchreid/models/shufflenet.html
index b644bca..bf63502 100644
--- a/_modules/torchreid/models/shufflenet.html
+++ b/_modules/torchreid/models/shufflenet.html
@@ -8,7 +8,7 @@
- torchreid.models.shufflenet — torchreid 0.7.6 documentation
+ torchreid.models.shufflenet — torchreid 0.7.7 documentation
@@ -59,7 +59,7 @@
- 0.7.6
+ 0.7.7
diff --git a/_modules/torchreid/models/shufflenetv2.html b/_modules/torchreid/models/shufflenetv2.html
new file mode 100644
index 0000000..3ad9e5b
--- /dev/null
+++ b/_modules/torchreid/models/shufflenetv2.html
@@ -0,0 +1,419 @@
+
+
+
+
+
+
+
+
+
+
+ torchreid.models.shufflenetv2 — torchreid 0.7.7 documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Source code for torchreid.models.shufflenetv2
+"""
+Code source: https://github.com/pytorch/vision
+"""
+from __future__ import absolute_import
+from __future__ import division
+
+__all__ = ['shufflenet_v2_x0_5', 'shufflenet_v2_x1_0', 'shufflenet_v2_x1_5', 'shufflenet_v2_x2_0']
+
+import torch
+from torch import nn
+from torch.nn import functional as F
+import torchvision
+import torch.utils.model_zoo as model_zoo
+
+
+model_urls = {
+ 'shufflenetv2_x0.5': 'https://download.pytorch.org/models/shufflenetv2_x0.5-f707e7126e.pth',
+ 'shufflenetv2_x1.0': 'https://download.pytorch.org/models/shufflenetv2_x1-5666bf0f80.pth',
+ 'shufflenetv2_x1.5': None,
+ 'shufflenetv2_x2.0': None,
+}
+
+
+def channel_shuffle(x, groups):
+ batchsize, num_channels, height, width = x.data.size()
+ channels_per_group = num_channels // groups
+
+ # reshape
+ x = x.view(batchsize, groups,
+ channels_per_group, height, width)
+
+ x = torch.transpose(x, 1, 2).contiguous()
+
+ # flatten
+ x = x.view(batchsize, -1, height, width)
+
+ return x
+
+
+class InvertedResidual(nn.Module):
+
+ def __init__(self, inp, oup, stride):
+ super(InvertedResidual, self).__init__()
+
+ if not (1 <= stride <= 3):
+ raise ValueError('illegal stride value')
+ self.stride = stride
+
+ branch_features = oup // 2
+ assert (self.stride != 1) or (inp == branch_features << 1)
+
+ if self.stride > 1:
+ self.branch1 = nn.Sequential(
+ self.depthwise_conv(inp, inp, kernel_size=3, stride=self.stride, padding=1),
+ nn.BatchNorm2d(inp),
+ nn.Conv2d(inp, branch_features, kernel_size=1, stride=1, padding=0, bias=False),
+ nn.BatchNorm2d(branch_features),
+ nn.ReLU(inplace=True),
+ )
+
+ self.branch2 = nn.Sequential(
+ nn.Conv2d(inp if (self.stride > 1) else branch_features,
+ branch_features, kernel_size=1, stride=1, padding=0, bias=False),
+ nn.BatchNorm2d(branch_features),
+ nn.ReLU(inplace=True),
+ self.depthwise_conv(branch_features, branch_features, kernel_size=3, stride=self.stride, padding=1),
+ nn.BatchNorm2d(branch_features),
+ nn.Conv2d(branch_features, branch_features, kernel_size=1, stride=1, padding=0, bias=False),
+ nn.BatchNorm2d(branch_features),
+ nn.ReLU(inplace=True),
+ )
+
+ @staticmethod
+ def depthwise_conv(i, o, kernel_size, stride=1, padding=0, bias=False):
+ return nn.Conv2d(i, o, kernel_size, stride, padding, bias=bias, groups=i)
+
+ def forward(self, x):
+ if self.stride == 1:
+ x1, x2 = x.chunk(2, dim=1)
+ out = torch.cat((x1, self.branch2(x2)), dim=1)
+ else:
+ out = torch.cat((self.branch1(x), self.branch2(x)), dim=1)
+
+ out = channel_shuffle(out, 2)
+
+ return out
+
+
+[docs]class ShuffleNetV2(nn.Module):
+ """ShuffleNetV2.
+
+ Reference:
+ Ma et al. ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design. ECCV 2018.
+
+ Public keys:
+ - ``shufflenet_v2_x0_5``: ShuffleNetV2 x0.5.
+ - ``shufflenet_v2_x1_0``: ShuffleNetV2 x1.0.
+ - ``shufflenet_v2_x1_5``: ShuffleNetV2 x1.5.
+ - ``shufflenet_v2_x2_0``: ShuffleNetV2 x2.0.
+ """
+
+ def __init__(self, num_classes, loss, stages_repeats, stages_out_channels, **kwargs):
+ super(ShuffleNetV2, self).__init__()
+ self.loss = loss
+
+ if len(stages_repeats) != 3:
+ raise ValueError('expected stages_repeats as list of 3 positive ints')
+ if len(stages_out_channels) != 5:
+ raise ValueError('expected stages_out_channels as list of 5 positive ints')
+ self._stage_out_channels = stages_out_channels
+
+ input_channels = 3
+ output_channels = self._stage_out_channels[0]
+ self.conv1 = nn.Sequential(
+ nn.Conv2d(input_channels, output_channels, 3, 2, 1, bias=False),
+ nn.BatchNorm2d(output_channels),
+ nn.ReLU(inplace=True),
+ )
+ input_channels = output_channels
+
+ self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)
+
+ stage_names = ['stage{}'.format(i) for i in [2, 3, 4]]
+ for name, repeats, output_channels in zip(
+ stage_names, stages_repeats, self._stage_out_channels[1:]):
+ seq = [InvertedResidual(input_channels, output_channels, 2)]
+ for i in range(repeats - 1):
+ seq.append(InvertedResidual(output_channels, output_channels, 1))
+ setattr(self, name, nn.Sequential(*seq))
+ input_channels = output_channels
+
+ output_channels = self._stage_out_channels[-1]
+ self.conv5 = nn.Sequential(
+ nn.Conv2d(input_channels, output_channels, 1, 1, 0, bias=False),
+ nn.BatchNorm2d(output_channels),
+ nn.ReLU(inplace=True),
+ )
+ self.global_avgpool = nn.AdaptiveAvgPool2d((1, 1))
+
+ self.classifier = nn.Linear(output_channels, num_classes)
+
+ def featuremaps(self, x):
+ x = self.conv1(x)
+ x = self.maxpool(x)
+ x = self.stage2(x)
+ x = self.stage3(x)
+ x = self.stage4(x)
+ x = self.conv5(x)
+ return x
+
+ def forward(self, x):
+ f = self.featuremaps(x)
+ v = self.global_avgpool(f)
+ v = v.view(v.size(0), -1)
+
+ if not self.training:
+ return v
+
+ y = self.classifier(v)
+
+ if self.loss == 'softmax':
+ return y
+ elif self.loss == 'triplet':
+ return y, v
+ else:
+ raise KeyError("Unsupported loss: {}".format(self.loss))
+
+
+def init_pretrained_weights(model, model_url):
+ """Initializes model with pretrained weights.
+
+ Layers that don't match with pretrained layers in name or size are kept unchanged.
+ """
+ if model_url is None:
+ import warnings
+ warnings.warn('ImageNet pretrained weights are unavailable for this model')
+ return
+ pretrain_dict = model_zoo.load_url(model_url)
+ model_dict = model.state_dict()
+ pretrain_dict = {k: v for k, v in pretrain_dict.items() if k in model_dict and model_dict[k].size() == v.size()}
+ model_dict.update(pretrain_dict)
+ model.load_state_dict(model_dict)
+
+
+def shufflenet_v2_x0_5(num_classes, loss='softmax', pretrained=True, **kwargs):
+ model = ShuffleNetV2(num_classes, loss, [4, 8, 4], [24, 48, 96, 192, 1024], **kwargs)
+ if pretrained:
+ init_pretrained_weights(model, model_urls['shufflenetv2_x0.5'])
+ return model
+
+
+def shufflenet_v2_x1_0(num_classes, loss='softmax', pretrained=True, **kwargs):
+ model = ShuffleNetV2(num_classes, loss, [4, 8, 4], [24, 116, 232, 464, 1024], **kwargs)
+ if pretrained:
+ init_pretrained_weights(model, model_urls['shufflenetv2_x1.0'])
+ return model
+
+
+def shufflenet_v2_x1_5(num_classes, loss='softmax', pretrained=True, **kwargs):
+ model = ShuffleNetV2(num_classes, loss, [4, 8, 4], [24, 176, 352, 704, 1024], **kwargs)
+ if pretrained:
+ init_pretrained_weights(model, model_urls['shufflenetv2_x1.5'])
+ return model
+
+
+def shufflenet_v2_x2_0(num_classes, loss='softmax', pretrained=True, **kwargs):
+ model = ShuffleNetV2(num_classes, loss, [4, 8, 4], [24, 244, 488, 976, 2048], **kwargs)
+ if pretrained:
+ init_pretrained_weights(model, model_urls['shufflenetv2_x2.0'])
+ return model
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/_modules/torchreid/models/squeezenet.html b/_modules/torchreid/models/squeezenet.html
index a7a5a1e..5b93d03 100644
--- a/_modules/torchreid/models/squeezenet.html
+++ b/_modules/torchreid/models/squeezenet.html
@@ -8,7 +8,7 @@
- torchreid.models.squeezenet — torchreid 0.7.6 documentation
+ torchreid.models.squeezenet — torchreid 0.7.7 documentation
@@ -59,7 +59,7 @@
- 0.7.6
+ 0.7.7
@@ -165,7 +165,10 @@
Source code for torchreid.models.squeezenet
-from __future__ import absolute_import
+"""
+Code source: https://github.com/pytorch/vision
+"""
+from __future__ import absolute_import
from __future__ import division
__all__ = [
diff --git a/_modules/torchreid/models/xception.html b/_modules/torchreid/models/xception.html
index 5d08f36..7f85a86 100644
--- a/_modules/torchreid/models/xception.html
+++ b/_modules/torchreid/models/xception.html
@@ -8,7 +8,7 @@
- torchreid.models.xception — torchreid 0.7.6 documentation
+ torchreid.models.xception — torchreid 0.7.7 documentation
@@ -59,7 +59,7 @@
- 0.7.6
+ 0.7.7
diff --git a/_modules/torchreid/optim/lr_scheduler.html b/_modules/torchreid/optim/lr_scheduler.html
index 9bdf9f0..a1d8705 100644
--- a/_modules/torchreid/optim/lr_scheduler.html
+++ b/_modules/torchreid/optim/lr_scheduler.html
@@ -8,7 +8,7 @@
- torchreid.optim.lr_scheduler — torchreid 0.7.6 documentation
+ torchreid.optim.lr_scheduler — torchreid 0.7.7 documentation
@@ -59,7 +59,7 @@
- 0.7.6
+ 0.7.7
diff --git a/_modules/torchreid/optim/optimizer.html b/_modules/torchreid/optim/optimizer.html
index d9173b2..8dcb348 100644
--- a/_modules/torchreid/optim/optimizer.html
+++ b/_modules/torchreid/optim/optimizer.html
@@ -8,7 +8,7 @@
- torchreid.optim.optimizer — torchreid 0.7.6 documentation
+ torchreid.optim.optimizer — torchreid 0.7.7 documentation
@@ -59,7 +59,7 @@
- 0.7.6
+ 0.7.7
diff --git a/_modules/torchreid/utils/avgmeter.html b/_modules/torchreid/utils/avgmeter.html
index 774eade..6829733 100644
--- a/_modules/torchreid/utils/avgmeter.html
+++ b/_modules/torchreid/utils/avgmeter.html
@@ -8,7 +8,7 @@
- torchreid.utils.avgmeter — torchreid 0.7.6 documentation
+ torchreid.utils.avgmeter — torchreid 0.7.7 documentation
@@ -59,7 +59,7 @@
- 0.7.6
+ 0.7.7
diff --git a/_modules/torchreid/utils/loggers.html b/_modules/torchreid/utils/loggers.html
index 39ef183..3c14be2 100644
--- a/_modules/torchreid/utils/loggers.html
+++ b/_modules/torchreid/utils/loggers.html
@@ -8,7 +8,7 @@
- torchreid.utils.loggers — torchreid 0.7.6 documentation
+ torchreid.utils.loggers — torchreid 0.7.7 documentation
@@ -59,7 +59,7 @@
- 0.7.6
+ 0.7.7
diff --git a/_modules/torchreid/utils/model_complexity.html b/_modules/torchreid/utils/model_complexity.html
index ee93c6f..6042abb 100644
--- a/_modules/torchreid/utils/model_complexity.html
+++ b/_modules/torchreid/utils/model_complexity.html
@@ -8,7 +8,7 @@
- torchreid.utils.model_complexity — torchreid 0.7.6 documentation
+ torchreid.utils.model_complexity — torchreid 0.7.7 documentation
@@ -59,7 +59,7 @@
- 0.7.6
+ 0.7.7
diff --git a/_modules/torchreid/utils/reidtools.html b/_modules/torchreid/utils/reidtools.html
index 23b9b8d..bd6c701 100644
--- a/_modules/torchreid/utils/reidtools.html
+++ b/_modules/torchreid/utils/reidtools.html
@@ -8,7 +8,7 @@
- torchreid.utils.reidtools — torchreid 0.7.6 documentation
+ torchreid.utils.reidtools — torchreid 0.7.7 documentation
@@ -59,7 +59,7 @@
- 0.7.6
+ 0.7.7
diff --git a/_modules/torchreid/utils/tools.html b/_modules/torchreid/utils/tools.html
index c44220b..ea4211c 100644
--- a/_modules/torchreid/utils/tools.html
+++ b/_modules/torchreid/utils/tools.html
@@ -8,7 +8,7 @@
- torchreid.utils.tools — torchreid 0.7.6 documentation
+ torchreid.utils.tools — torchreid 0.7.7 documentation
@@ -59,7 +59,7 @@
- 0.7.6
+ 0.7.7
@@ -170,7 +170,7 @@
from __future__ import division
__all__ = ['mkdir_if_missing', 'check_isfile', 'read_json', 'write_json',
- 'set_random_seed', 'download_url', 'read_image']
+ 'set_random_seed', 'download_url', 'read_image', 'collect_env_info']
import sys
import os
@@ -182,6 +182,7 @@
import warnings
import random
import numpy as np
+import PIL
from PIL import Image
import torch
@@ -281,6 +282,17 @@
print('IOError incurred when reading "{}". Will redo. Don\'t worry. Just chill.'.format(img_path))
pass
return img
+
+
+[docs]def collect_env_info():
+ """Returns env info as a string.
+
+ Code source: github.com/facebookresearch/maskrcnn-benchmark
+ """
+ from torch.utils.collect_env import get_pretty_env_info
+ env_str = get_pretty_env_info()
+ env_str += '\n Pillow ({})'.format(PIL.__version__)
+ return env_str
diff --git a/_modules/torchreid/utils/torchtools.html b/_modules/torchreid/utils/torchtools.html
index 28dd621..0e7fad9 100644
--- a/_modules/torchreid/utils/torchtools.html
+++ b/_modules/torchreid/utils/torchtools.html
@@ -8,7 +8,7 @@
- torchreid.utils.torchtools — torchreid 0.7.6 documentation
+ torchreid.utils.torchtools — torchreid 0.7.7 documentation
@@ -59,7 +59,7 @@
- 0.7.6
+ 0.7.7
diff --git a/_sources/pkg/models.rst.txt b/_sources/pkg/models.rst.txt
index 81be2bb..c8110ea 100644
--- a/_sources/pkg/models.rst.txt
+++ b/_sources/pkg/models.rst.txt
@@ -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
diff --git a/_static/documentation_options.js b/_static/documentation_options.js
index 9fb6716..bb72704 100644
--- a/_static/documentation_options.js
+++ b/_static/documentation_options.js
@@ -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',
diff --git a/datasets.html b/datasets.html
index e81a1a7..e00191d 100644
--- a/datasets.html
+++ b/datasets.html
@@ -8,7 +8,7 @@
- Datasets — torchreid 0.7.6 documentation
+ Datasets — torchreid 0.7.7 documentation
@@ -61,7 +61,7 @@
- 0.7.6
+ 0.7.7
diff --git a/evaluation.html b/evaluation.html
index ea9eed7..3a560bb 100644
--- a/evaluation.html
+++ b/evaluation.html
@@ -8,7 +8,7 @@
- Evaluation — torchreid 0.7.6 documentation
+ Evaluation — torchreid 0.7.7 documentation
@@ -61,7 +61,7 @@
- 0.7.6
+ 0.7.7
diff --git a/genindex.html b/genindex.html
index e16da2a..b1b5a71 100644
--- a/genindex.html
+++ b/genindex.html
@@ -9,7 +9,7 @@
- Index — torchreid 0.7.6 documentation
+ Index — torchreid 0.7.7 documentation
@@ -60,7 +60,7 @@
- 0.7.6
+ 0.7.7
@@ -227,6 +227,8 @@
check_before_run() (torchreid.data.datasets.dataset.Dataset method)
check_isfile() (in module torchreid.utils.tools)
+
+ collect_env_info() (in module torchreid.utils.tools)
ColorAugmentation (class in torchreid.data.transforms)
@@ -236,10 +238,10 @@
(torchreid.data.datasets.video.mars.Mars method)
- compute_distance_matrix() (in module torchreid.metrics.distance)
-
+ - compute_distance_matrix() (in module torchreid.metrics.distance)
+
- compute_model_complexity() (in module torchreid.utils.model_complexity)
- cosine_distance() (in module torchreid.metrics.distance)
@@ -457,8 +459,6 @@
- ResNet (class in torchreid.models.resnet)
- ResNetMid (class in torchreid.models.resnetmid)
-
- - ResNeXt (class in torchreid.models.resnext)
- resume_from_checkpoint() (in module torchreid.utils.torchtools)
@@ -495,6 +495,8 @@
- ShuffleNet (class in torchreid.models.shufflenet)
+
+ - ShuffleNetV2 (class in torchreid.models.shufflenetv2)
- SqueezeNet (class in torchreid.models.squeezenet)
diff --git a/index.html b/index.html
index 4581576..8a6d9d6 100644
--- a/index.html
+++ b/index.html
@@ -8,7 +8,7 @@
- Torchreid — torchreid 0.7.6 documentation
+ Torchreid — torchreid 0.7.7 documentation
@@ -60,7 +60,7 @@
- 0.7.6
+ 0.7.7
diff --git a/objects.inv b/objects.inv
index 430262e..17f8025 100644
Binary files a/objects.inv and b/objects.inv differ
diff --git a/pkg/data.html b/pkg/data.html
index 8942fac..bb7c628 100644
--- a/pkg/data.html
+++ b/pkg/data.html
@@ -8,7 +8,7 @@
- torchreid.data — torchreid 0.7.6 documentation
+ torchreid.data — torchreid 0.7.7 documentation
@@ -61,7 +61,7 @@
- 0.7.6
+ 0.7.7
diff --git a/pkg/engine.html b/pkg/engine.html
index fad8fd3..27d9f45 100644
--- a/pkg/engine.html
+++ b/pkg/engine.html
@@ -8,7 +8,7 @@
- torchreid.engine — torchreid 0.7.6 documentation
+ torchreid.engine — torchreid 0.7.7 documentation
@@ -61,7 +61,7 @@
- 0.7.6
+ 0.7.7
@@ -210,7 +210,7 @@ or torchreid.data.V
- max_epoch (int) – maximum epoch.
- start_epoch (int, optional) – starting epoch. Default is 0.
- fixbase_epoch (int, optional) – number of epochs to train
open_layers
(new layers)
-while keeping base layers frozen. Default is 0. fixbase_epoch
is not counted
+while keeping base layers frozen. Default is 0. fixbase_epoch
is counted
in max_epoch
.
- open_layers (str or list, optional) – layers (attribute names) open for training.
- start_eval (int, optional) – from which epoch to start evaluation. Default is 0.
@@ -363,23 +363,17 @@ or torchreid.data.V
-
-
train
(epoch, trainloader, fixbase=False, open_layers=None, print_freq=10)[source]¶
-Trains the model for one epoch on source datasets using softmax loss.
-
-
-
-
-Parameters:
-- epoch (int) – current epoch.
-- trainloader (Dataloader) – training dataloader.
-- fixbase (bool, optional) – whether to fix base layers. Default is False.
-- open_layers (str or list, optional) – layers open for training.
-- print_freq (int, optional) – print frequency. Default is 10.
-
-
-
-
-
+train
(epoch, max_epoch, trainloader, fixbase_epoch=0, open_layers=None, print_freq=10)[source]¶
+Performs training on source datasets for one epoch.
+This will be called every epoch in run()
, e.g.
+for epoch in range(start_epoch, max_epoch):
+ self.train(some_arguments)
+
+
+
+Note
+This needs to be implemented in subclasses.
+
@@ -448,23 +442,17 @@ or torchreid.data.V
-
-
train
(epoch, trainloader, fixbase=False, open_layers=None, print_freq=10)[source]¶
-Trains the model for one epoch on source datasets using hard mining triplet loss.
-
-
-
-
-Parameters:
-- epoch (int) – current epoch.
-- trainloader (Dataloader) – training dataloader.
-- fixbase (bool, optional) – whether to fix base layers. Default is False.
-- open_layers (str or list, optional) – layers open for training.
-- print_freq (int, optional) – print frequency. Default is 10.
-
-
-
-
-
+train
(epoch, max_epoch, trainloader, fixbase_epoch=0, open_layers=None, print_freq=10)[source]¶
+Performs training on source datasets for one epoch.
+This will be called every epoch in run()
, e.g.
+for epoch in range(start_epoch, max_epoch):
+ self.train(some_arguments)
+
+
+
+Note
+This needs to be implemented in subclasses.
+
diff --git a/pkg/losses.html b/pkg/losses.html
index 5aaafee..b374f38 100644
--- a/pkg/losses.html
+++ b/pkg/losses.html
@@ -8,7 +8,7 @@
- torchreid.losses — torchreid 0.7.6 documentation
+ torchreid.losses — torchreid 0.7.7 documentation
@@ -61,7 +61,7 @@
- 0.7.6
+ 0.7.7
diff --git a/pkg/metrics.html b/pkg/metrics.html
index 4a1d3e6..eac95e9 100644
--- a/pkg/metrics.html
+++ b/pkg/metrics.html
@@ -8,7 +8,7 @@
- torchreid.metrics — torchreid 0.7.6 documentation
+ torchreid.metrics — torchreid 0.7.7 documentation
@@ -61,7 +61,7 @@
- 0.7.6
+ 0.7.7
diff --git a/pkg/models.html b/pkg/models.html
index 73c9c30..55d2542 100644
--- a/pkg/models.html
+++ b/pkg/models.html
@@ -8,7 +8,7 @@
- torchreid.models — torchreid 0.7.6 documentation
+ torchreid.models — torchreid 0.7.7 documentation
@@ -61,7 +61,7 @@
- 0.7.6
+ 0.7.7
@@ -231,11 +231,15 @@ Default is True.
ImageNet Classification Models¶
-
-class
torchreid.models.resnet.
ResNet
(num_classes, loss, block, layers, last_stride=2, fc_dims=None, dropout_p=None, **kwargs)[source]¶
+class torchreid.models.resnet.
ResNet
(num_classes, loss, block, layers, zero_init_residual=False, groups=1, width_per_group=64, replace_stride_with_dilation=None, norm_layer=None, last_stride=2, fc_dims=None, dropout_p=None, **kwargs)[source]¶
Residual network.
- Reference:
-- He et al. Deep Residual Learning for Image Recognition. CVPR 2016.
+
+- He et al. Deep Residual Learning for Image Recognition. CVPR 2016.
+- Xie et al. Aggregated Residual Transformations for Deep Neural Networks. CVPR 2017.
+
+
- Public keys:
resnet18
: ResNet18.
@@ -243,29 +247,14 @@ Default is True.
resnet50
: ResNet50.
resnet101
: ResNet101.
resnet152
: ResNet152.
+resnext50_32x4d
: ResNeXt50.
+resnext101_32x8d
: ResNeXt101.
resnet50_fc512
: ResNet50 + FC.
-
--
-class
torchreid.models.resnext.
ResNeXt
(num_classes, loss, block, layers, groups=32, base_width=4, last_stride=2, fc_dims=None, dropout_p=None, **kwargs)[source]¶
-ResNeXt.
-
-- Reference:
-- Xie et al. Aggregated Residual Transformations for Deep
-Neural Networks. CVPR 2017.
-- Public keys:
-
-resnext50_32x4d
: ResNeXt50 (groups=32, width=4).
-resnext50_32x4d_fc512
ResNeXt50 (groups=32, width=4) + FC.
-
-
-
-
-
-
class
torchreid.models.senet.
SENet
(num_classes, loss, block, layers, groups, reduction, dropout_p=0.2, inplanes=128, input_3x3=True, downsample_kernel_size=3, downsample_padding=1, last_stride=2, fc_dims=None, **kwargs)[source]¶
@@ -424,6 +413,24 @@ and< 0.5 MB model size. arXiv:1602.07360.
+
+-
+class
torchreid.models.shufflenetv2.
ShuffleNetV2
(num_classes, loss, stages_repeats, stages_out_channels, **kwargs)[source]¶
+ShuffleNetV2.
+
+- Reference:
+- Ma et al. ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design. ECCV 2018.
+- Public keys:
+
+shufflenet_v2_x0_5
: ShuffleNetV2 x0.5.
+shufflenet_v2_x1_0
: ShuffleNetV2 x1.0.
+shufflenet_v2_x1_5
: ShuffleNetV2 x1.5.
+shufflenet_v2_x2_0
: ShuffleNetV2 x2.0.
+
+
+
+
+
ReID-specific Models¶
diff --git a/pkg/optim.html b/pkg/optim.html
index 9bbff75..f9e22ba 100644
--- a/pkg/optim.html
+++ b/pkg/optim.html
@@ -8,7 +8,7 @@
- torchreid.optim — torchreid 0.7.6 documentation
+ torchreid.optim — torchreid 0.7.7 documentation
@@ -61,7 +61,7 @@
- 0.7.6
+ 0.7.7
diff --git a/pkg/utils.html b/pkg/utils.html
index d6a6327..1a44f9a 100644
--- a/pkg/utils.html
+++ b/pkg/utils.html
@@ -8,7 +8,7 @@
- torchreid.utils — torchreid 0.7.6 documentation
+ torchreid.utils — torchreid 0.7.7 documentation
@@ -61,7 +61,7 @@
- 0.7.6
+ 0.7.7
@@ -382,6 +382,13 @@ to show the summarized results, which are convenient for analysis.
+
+
ReID Tools¶
diff --git a/py-modindex.html b/py-modindex.html
index 84f9a87..c0a7133 100644
--- a/py-modindex.html
+++ b/py-modindex.html
@@ -8,7 +8,7 @@
- Python Module Index — torchreid 0.7.6 documentation
+ Python Module Index — torchreid 0.7.7 documentation
@@ -62,7 +62,7 @@
- 0.7.6
+ 0.7.7
diff --git a/search.html b/search.html
index 1aaeefb..278e33f 100644
--- a/search.html
+++ b/search.html
@@ -8,7 +8,7 @@
- Search — torchreid 0.7.6 documentation
+ Search — torchreid 0.7.7 documentation
@@ -60,7 +60,7 @@
- 0.7.6
+ 0.7.7
diff --git a/searchindex.js b/searchindex.js
index 462d226..aa303bf 100644
--- a/searchindex.js
+++ b/searchindex.js
@@ -1 +1 @@
-Search.setIndex({docnames:["AWESOME_REID","MODEL_ZOO","datasets","evaluation","index","pkg/data","pkg/engine","pkg/losses","pkg/metrics","pkg/models","pkg/optim","pkg/utils","user_guide"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.viewcode":1,sphinx:54},filenames:["AWESOME_REID.md","MODEL_ZOO.md","datasets.rst","evaluation.rst","index.rst","pkg/data.rst","pkg/engine.rst","pkg/losses.rst","pkg/metrics.rst","pkg/models.rst","pkg/optim.rst","pkg/utils.rst","user_guide.rst"],objects:{"torchreid.data":{datamanager:[5,0,0,"-"],sampler:[5,0,0,"-"],transforms:[5,0,0,"-"]},"torchreid.data.datamanager":{DataManager:[5,1,1,""],ImageDataManager:[5,1,1,""],VideoDataManager:[5,1,1,""]},"torchreid.data.datamanager.DataManager":{num_train_cams:[5,2,1,""],num_train_pids:[5,2,1,""],return_dataloaders:[5,3,1,""],return_testdataset_by_name:[5,3,1,""]},"torchreid.data.datasets":{__init__:[5,0,0,"-"],dataset:[5,0,0,"-"]},"torchreid.data.datasets.__init__":{init_image_dataset:[5,4,1,""],init_video_dataset:[5,4,1,""],register_image_dataset:[5,4,1,""],register_video_dataset:[5,4,1,""]},"torchreid.data.datasets.dataset":{Dataset:[5,1,1,""],ImageDataset:[5,1,1,""],VideoDataset:[5,1,1,""]},"torchreid.data.datasets.dataset.Dataset":{check_before_run:[5,3,1,""],combine_all:[5,3,1,""],download_dataset:[5,3,1,""],get_num_cams:[5,3,1,""],get_num_pids:[5,3,1,""],parse_data:[5,3,1,""],show_summary:[5,3,1,""]},"torchreid.data.datasets.dataset.ImageDataset":{show_summary:[5,3,1,""]},"torchreid.data.datasets.dataset.VideoDataset":{show_summary:[5,3,1,""]},"torchreid.data.datasets.image":{cuhk01:[5,0,0,"-"],cuhk03:[5,0,0,"-"],dukemtmcreid:[5,0,0,"-"],grid:[5,0,0,"-"],ilids:[5,0,0,"-"],market1501:[5,0,0,"-"],msmt17:[5,0,0,"-"],prid:[5,0,0,"-"],sensereid:[5,0,0,"-"],viper:[5,0,0,"-"]},"torchreid.data.datasets.image.cuhk01":{CUHK01:[5,1,1,""]},"torchreid.data.datasets.image.cuhk01.CUHK01":{prepare_split:[5,3,1,""]},"torchreid.data.datasets.image.cuhk03":{CUHK03:[5,1,1,""]},"torchreid.data.datasets.image.dukemtmcreid":{DukeMTMCreID:[5,1,1,""]},"torchreid.data.datasets.image.grid":{GRID:[5,1,1,""]},"torchreid.data.datasets.image.ilids":{iLIDS:[5,1,1,""]},"torchreid.data.datasets.image.market1501":{Market1501:[5,1,1,""]},"torchreid.data.datasets.image.msmt17":{MSMT17:[5,1,1,""]},"torchreid.data.datasets.image.prid":{PRID:[5,1,1,""]},"torchreid.data.datasets.image.sensereid":{SenseReID:[5,1,1,""]},"torchreid.data.datasets.image.viper":{VIPeR:[5,1,1,""]},"torchreid.data.datasets.video":{dukemtmcvidreid:[5,0,0,"-"],ilidsvid:[5,0,0,"-"],mars:[5,0,0,"-"],prid2011:[5,0,0,"-"]},"torchreid.data.datasets.video.dukemtmcvidreid":{DukeMTMCVidReID:[5,1,1,""]},"torchreid.data.datasets.video.ilidsvid":{iLIDSVID:[5,1,1,""]},"torchreid.data.datasets.video.mars":{Mars:[5,1,1,""]},"torchreid.data.datasets.video.mars.Mars":{combine_all:[5,3,1,""]},"torchreid.data.datasets.video.prid2011":{PRID2011:[5,1,1,""]},"torchreid.data.sampler":{RandomIdentitySampler:[5,1,1,""],build_train_sampler:[5,4,1,""]},"torchreid.data.transforms":{ColorAugmentation:[5,1,1,""],Random2DTranslation:[5,1,1,""],RandomErasing:[5,1,1,""],build_transforms:[5,4,1,""]},"torchreid.engine.engine":{Engine:[6,1,1,""]},"torchreid.engine.engine.Engine":{run:[6,3,1,""],test:[6,3,1,""],train:[6,3,1,""]},"torchreid.engine.image.softmax":{ImageSoftmaxEngine:[6,1,1,""]},"torchreid.engine.image.softmax.ImageSoftmaxEngine":{train:[6,3,1,""]},"torchreid.engine.image.triplet":{ImageTripletEngine:[6,1,1,""]},"torchreid.engine.image.triplet.ImageTripletEngine":{train:[6,3,1,""]},"torchreid.engine.video.softmax":{VideoSoftmaxEngine:[6,1,1,""]},"torchreid.engine.video.triplet":{VideoTripletEngine:[6,1,1,""]},"torchreid.losses":{cross_entropy_loss:[7,0,0,"-"],hard_mine_triplet_loss:[7,0,0,"-"]},"torchreid.losses.cross_entropy_loss":{CrossEntropyLoss:[7,1,1,""]},"torchreid.losses.cross_entropy_loss.CrossEntropyLoss":{forward:[7,3,1,""]},"torchreid.losses.hard_mine_triplet_loss":{TripletLoss:[7,1,1,""]},"torchreid.losses.hard_mine_triplet_loss.TripletLoss":{forward:[7,3,1,""]},"torchreid.metrics":{accuracy:[8,0,0,"-"],distance:[8,0,0,"-"],rank:[8,0,0,"-"]},"torchreid.metrics.accuracy":{accuracy:[8,4,1,""]},"torchreid.metrics.distance":{compute_distance_matrix:[8,4,1,""],cosine_distance:[8,4,1,""],euclidean_squared_distance:[8,4,1,""]},"torchreid.metrics.rank":{evaluate_rank:[8,4,1,""]},"torchreid.models":{__init__:[9,0,0,"-"]},"torchreid.models.__init__":{build_model:[9,4,1,""],show_avai_models:[9,4,1,""]},"torchreid.models.densenet":{DenseNet:[9,1,1,""]},"torchreid.models.hacnn":{HACNN:[9,1,1,""]},"torchreid.models.inceptionresnetv2":{InceptionResNetV2:[9,1,1,""]},"torchreid.models.inceptionv4":{InceptionV4:[9,1,1,""]},"torchreid.models.mlfn":{MLFN:[9,1,1,""]},"torchreid.models.mobilenetv2":{MobileNetV2:[9,1,1,""]},"torchreid.models.mudeep":{MuDeep:[9,1,1,""]},"torchreid.models.nasnet":{NASNetAMobile:[9,1,1,""]},"torchreid.models.pcb":{PCB:[9,1,1,""]},"torchreid.models.resnet":{ResNet:[9,1,1,""]},"torchreid.models.resnetmid":{ResNetMid:[9,1,1,""]},"torchreid.models.resnext":{ResNeXt:[9,1,1,""]},"torchreid.models.senet":{SENet:[9,1,1,""]},"torchreid.models.shufflenet":{ShuffleNet:[9,1,1,""]},"torchreid.models.squeezenet":{SqueezeNet:[9,1,1,""]},"torchreid.models.xception":{Xception:[9,1,1,""]},"torchreid.optim":{lr_scheduler:[10,0,0,"-"],optimizer:[10,0,0,"-"]},"torchreid.optim.lr_scheduler":{build_lr_scheduler:[10,4,1,""]},"torchreid.optim.optimizer":{build_optimizer:[10,4,1,""]},"torchreid.utils":{avgmeter:[11,0,0,"-"],loggers:[11,0,0,"-"],model_complexity:[11,0,0,"-"],reidtools:[11,0,0,"-"],tools:[11,0,0,"-"],torchtools:[11,0,0,"-"]},"torchreid.utils.avgmeter":{AverageMeter:[11,1,1,""]},"torchreid.utils.loggers":{Logger:[11,1,1,""],RankLogger:[11,1,1,""]},"torchreid.utils.loggers.RankLogger":{show_summary:[11,3,1,""],write:[11,3,1,""]},"torchreid.utils.model_complexity":{compute_model_complexity:[11,4,1,""]},"torchreid.utils.reidtools":{visualize_ranked_results:[11,4,1,""]},"torchreid.utils.tools":{check_isfile:[11,4,1,""],download_url:[11,4,1,""],mkdir_if_missing:[11,4,1,""],read_image:[11,4,1,""],read_json:[11,4,1,""],write_json:[11,4,1,""]},"torchreid.utils.torchtools":{count_num_param:[11,4,1,""],load_checkpoint:[11,4,1,""],load_pretrained_weights:[11,4,1,""],open_all_layers:[11,4,1,""],open_specified_layers:[11,4,1,""],resume_from_checkpoint:[11,4,1,""],save_checkpoint:[11,4,1,""]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","attribute","Python attribute"],"3":["py","method","Python method"],"4":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:class","2":"py:attribute","3":"py:method","4":"py:function"},terms:{"0b56ofsrvi8hubvjltzkwv2vaowm":5,"10x":8,"500k":[2,5],"50x":9,"abstract":5,"case":[2,5],"class":[5,6,7,9,11,12],"default":[2,4,5,6,7,8,9,10,11,12],"float":[5,6,7,10,11],"function":[5,6,7,8,9,10,11,12],"import":[4,5,6,7,8,9,11,12],"int":[5,6,7,8,9,10,11,12],"new":[2,5,6,10,12],"public":[2,4,5,9,12],"return":[5,8,9,11],"super":12,"true":[2,4,5,6,7,8,9,10,11,12],"while":[3,5,6,10,11,12],Added:4,For:[4,8,12],IDs:5,NAS:9,Not:0,One:[0,5],Such:5,The:[2,3,4,6,9,12],With:7,__future__:12,__getitem__:5,__init__:[5,9,12],_extract_featur:6,_parse_data_for_ev:6,aaai:9,absolut:12,absolute_import:12,abspath:12,access:4,accordingli:2,accuraci:[9,11],accv:5,across:0,activ:[2,4,5],actual:[11,12],adam:[4,6,10],adam_beta1:10,adam_beta2:10,adapt:0,add:[4,5],added:4,addit:2,adopt:[2,12],advanc:4,after:11,aggreg:9,alexnet:9,all:[5,11,12],allow:10,also:[2,4,10,12],alter:5,analysi:[5,11],andrea:4,anoth:12,app:4,appear:5,appli:[7,12],approach:0,architectur:[7,9],area:5,arg:11,argument:[2,3,12],arrai:8,art:4,articl:4,arxiv:[4,7,9],aspect:5,associ:5,asterisk:1,attent:[0,9],attribut:[2,6,10],augment:[1,5],author:4,autom:2,automat:[2,4,11,12],avail:9,averag:6,averagemet:11,avg:6,avgmet:11,avoid:12,awar:0,back:[0,12],backbon:0,background:5,base:[0,5,9,10,12],base_lr_mult:[10,12],base_width:9,baselin:[5,9],basic:12,batch:[4,5,6],batch_siz:[4,5,6,7,8,11,12],batchnorm:12,bbox_test:2,bbox_train:2,becaus:3,been:[4,6,12],befor:[5,6,7,12],begin:7,below:[2,12],benchmark:5,besid:2,best:11,beta:10,between:6,beyond:9,bilinear:5,bischof:[2,5],blob:[7,11],block:9,block_config:9,bmvc:5,bn_size:9,bodi:5,bool:[5,6,7,8,9,10,11],both:[2,4,5,6,11],bottleneck:9,bottom:0,bounding_box_test:2,bounding_box_train:2,bridg:5,build:[4,5,9,10],build_lr_schedul:[4,6,10,12],build_model:[4,6,9,11,12],build_optim:[4,6,10,12],build_train_sampl:5,build_transform:5,built:[4,10],call:[2,6],cam_a:2,cam_b:2,camera:[0,3,5,8,12],camid:[5,11,12],campu:2,can:[0,1,2,3,4,8,10,11,12],captur:[5,8],cavallaro:4,ccloi:[2,5],chang:[2,9],channel:[5,9],check:[5,11],check_before_run:5,check_isfil:11,checkpoint:[11,12],choic:[5,6],chollet:9,cite:4,classic:[3,5,6,8],classif:[1,5,10,11,12],classifi:[10,11,12],click:1,clone:4,cluster:0,cmc:[2,6,8],code:[0,2,4,6,8,12],collect:0,color:5,color_aug:5,color_jitt:5,coloraugment:5,com:[2,4,5,7,11],combin:5,combine_al:5,combineal:[5,6,12],common:12,comparison:2,complex:[4,11],comput:[1,2,4,6,7,8,11],compute_distance_matrix:8,compute_model_complex:[11,12],connect:9,consid:[5,11],consist:0,consol:11,constant:10,construct:[11,12],contain:[3,5,6,7,8,11,12],conveni:11,convolut:[9,11],convolutionalneur:5,copi:11,correl:5,correspond:5,cosin:8,cosine_dist:8,count:[6,11,12],count_num_param:11,cpu:[5,6],creat:[2,4,11],crf:0,crop:5,cross:[4,7,9],cross_entropy_loss:7,crossentropyloss:7,cuda:[4,6],cudatoolkit:4,cuhk01:[3,4,5],cuhk03:[3,4,5,6,8,12],cuhk03_classic_split:[2,5],cuhk03_label:[2,5],cuhk03_new_protocol_config_detect:2,cuhk03_new_protocol_config_label:2,cuhk03_releas:2,cuhk:[2,5],cuhk_identif:[2,5],current:[6,9,10,11],cvpr:[5,6,7,9],cysu:[7,11],cython:8,damag:12,dampen:10,data:[1,2,3,4,6,12],data_sourc:5,dataload:6,datamanag:[2,4,5,6,12],dataset:[6,11],dataset_:5,dataset_dir:[2,5,12],dataset_nam:[6,12],dataset_url:5,deal:11,decai:[6,10],decomposit:5,deep:[0,2,4,5,9,12],deeper:5,deepreid:5,def:12,defaul:5,default_pars:4,defens:7,defin:3,delet:2,denot:[2,7,11,12],dens:9,densenet121:9,densenet121_fc512:[1,9],densenet161:9,densenet169:9,densenet201:9,densenet:[4,9],depend:[4,11,12],deprec:11,depthwis:9,descript:5,desir:5,destin:11,detail:[2,4,6,11,12],detect:[2,5],determin:[10,12],develop:4,deviat:5,devic:[4,7,9],devil:9,dict:[6,11],dictionari:[6,11],differ:[2,10],digit:5,dir:4,directli:[2,3],directori:[2,4,5,6,11],dirnam:11,discard:[11,12],discrimin:5,displai:9,dissect:0,dist_metr:6,distanc:[6,11],distil:0,distmat:[8,11],distractor:[2,5],distractors_500k:2,distrctor:2,divid:3,divis:12,document:4,doing:[2,4,11,12],domain:[0,5,9],done:[3,5,12],download:[1,2,5,11],download_dataset:5,download_url:11,downloads_qmul_ilid:[2,5],downloads_qmul_underground_reid:5,downsample_kernel_s:9,downsample_pad:9,drive:5,drop_rat:9,dropout_p:9,dst:11,duke:2,dukemtmc:[3,4,5,12],dukemtmcreid:[1,5,11,12],dukemtmcvidreid:5,each:[3,5,6,7,8,11,12],easi:[4,12],easili:12,eccv:[5,9],eccvw:5,edu:[2,5],eec:[2,5],effici:9,embed_dim:9,empti:[5,10],enabl:[2,6,8,10,12],enclos:2,end:[0,2,4,6,7,12],engin:4,entropi:[4,7],env:4,environ:4,epoch:[4,6,10,11,12],epsilon:7,equal:5,equat:7,eras:5,estim:[11,12],etc:4,euclidean:[6,8],euclidean_squared_dist:8,eval_freq:[4,6,12],evalu:[2,4,5,6,8,11],evaluate_rank:8,evenli:5,everi:[6,10,11],exampl:[4,5,6,8,9,10,11,12],excit:9,exemplar:0,exist:5,expandus:12,explicitli:5,exploit:[0,5,9],extens:4,extern:11,extra:2,extract:[2,5,11,12],extrem:9,factor:[5,10],factoris:[0,9],fail:2,fair:2,fals:[4,5,6,8,10,11,12],favor:11,fc_dim:9,feat_dim:[7,9],featur:[0,4,5,6,7,8,9,11,12],few:12,fewer:9,file:[2,4,5,11],filter:5,filters_multipli:9,find:[0,4],fine:[3,12],first:5,fix:[3,6],fixbas:6,fixbase_epoch:[6,12],flop:[11,12],folder:2,follow:[2,4],format:[1,5],forth:3,forward:[7,11,12],four:[2,5],fpath:11,frac:7,frequenc:6,from:[0,1,2,3,6,7,8,9,11,12],frozen:[6,11,12],fusion:[5,9],g_camid:8,g_pid:8,galleri:[2,3,5,6,8,11],galleryload:6,gamma:10,gan:[0,5],gap:5,gener:[0,2,3,5,6,12],get:12,get_num_cam:5,get_num_pid:5,git:4,github:[2,4,5,7,11],give:12,given:[5,11],going:5,googl:5,gpu:[4,7,9],gradient:12,gradual:[0,5],grai:5,graph:[11,12],grid:[3,4,5],ground:[7,8],group:[0,5,9],growth_rat:9,guid:[0,2,5],hacnn:[1,4,9],handl:11,hard:[4,6,7],hard_mine_triplet_loss:7,hardwar:[11,12],harm:12,harmoni:[0,9],has:[3,4,5,6,10,12],have:[3,10,12],height:[4,5,6,12],help:2,here:[0,2,12],herman:7,hetero:0,highli:[4,8],highlight:1,hirzer:5,homogen:0,horizont:0,how:[2,5,6,11],howev:[2,12],html:[2,5],http:[2,4,5,7,11],huang:9,human:[0,5],iandola:9,iccv:[5,9],icg:[2,5],idea:12,ident:[3,5,6,8,9,10],identif:[0,4,5,7,9,12],ids:[3,5,12],ignor:[1,11,12],ilid:[3,4,5],ilidsvid:5,imag:[0,9,11,12],imagedatamanag:[2,3,4,5,6,12],imagedataset:[5,12],imagenet:5,images_detect:2,images_label:2,imagesoftmaxengin:[4,6,12],imagetripletengin:[6,12],img:5,img_path:[5,11,12],impact:9,implement:[4,6,11,12],improv:5,incept:[4,7,9],inceptionresnetv2:9,inceptionv4:9,includ:[4,12],incompat:11,incred:4,index:[4,5,7],infer:[11,12],info:2,inform:5,inherit:12,init_image_dataset:5,init_video_dataset:5,initi:[2,5,10,11,12],inplan:9,input1:8,input2:8,input:[1,5,7,11,12],input_3x3:9,input_s:11,instal:8,instanc:[5,6,8,9],instanti:12,institut:[2,5],instruct:4,integ:10,intens:5,interpol:5,intuit:12,invari:0,invert:9,is_best:11,jason:2,jitter:5,join:[11,12],journal:4,json:[2,11],just:12,kaiyang:4,kaiyangzh:4,keep:[3,6,11,12],kei:[2,5,9,11],krizhevski:5,kroneck:0,kwarg:[5,9,12],kz303:2,label:[2,4,5,6,7,8],label_smooth:[4,6,7],larg:[5,12],last:5,last_strid:9,layer:[1,6,9,10,11],layumi:5,lead:5,learn:[0,4,5,6,9,10],learn_region:9,level:[0,9],liangzheng06:2,liangzheng:[2,5],librari:4,lid:2,lids_pedestrian:2,like:[2,12],linear:[9,11],link:[0,2],list:[5,6,8,10,11,12],list_galleri:2,list_queri:2,list_train:2,list_val:2,load:[2,4,9,11,12],load_checkpoint:11,load_pretrained_weight:[11,12],log:[4,6,11,12],log_nam:11,loi:5,longtensor:[7,8],look:2,loss:[1,6,9,11,12],loss_valu:11,lr_schedul:[4,6,10],lrs:[2,5],lrschedul:6,machin:4,main:4,manag:[4,12],manduchi:2,mani:5,manual:2,map:[1,2],mar:[3,4,5,6],margin:[6,7],market1501:[1,3,4,5,6,11,12],market1501_500k:[2,4,5,12],market:[2,4],master:[2,7,11],mat:2,match:[0,2,9,11],matrix:[6,7,8,11],matter:0,max:[4,5,6],max_epoch:[4,6,12],max_rank:8,maximum:[6,8],mean:[1,2,5,6,8,11,12],measur:5,memori:0,metadata:2,method:[2,4,10,11,12],metric:[2,5,6],mid:[4,9],middl:9,might:12,min:5,min_seq_len:5,mine:[4,6,7],minibatch:11,miss:[0,11],mkdir_if_miss:11,mlfn:[1,4,9],mobil:9,mobilenetv2:[4,9],mobilenetv2_1dot0:[1,9],mobilenetv2_1dot4:[1,9],mode:[2,5,12],model:[0,3,5,6,10,11],model_complex:[11,12],model_s:11,modifi:[2,4],modul:[4,6,9,10,11,12],momentum:10,more:[2,4,6,8,12],most:4,msmt17:[1,3,4,5,12],msmt17_v1:2,msmt17_v2:2,mudeep:[4,9],multi:[0,4,5,9],multi_shot:2,multi_step:10,multilabel:0,multipl:[0,5,10,11],multipli:10,multiscal:9,must:6,mutual:0,my_model:11,name:[2,4,5,6,9,10,11,12],nasnet:[4,9],nasnetamobil:9,nchannel:9,ndarrai:[8,11],necessari:6,need:[2,4,5,6,12],neg:7,nesterov:10,net:[0,5,9,11],network:[0,5,9,11],neural:[5,9,11],new_dataset:[5,12],new_lay:[10,12],newdataset:[5,12],nip:5,node:5,none:[5,6,9,11],nonlinear:9,norm_mean:5,norm_std:5,normal:[0,5,6,7,10],normalize_featur:6,note:[3,11,12],now:10,num_class:[4,6,7,8,9,11,12],num_galleri:[8,11],num_group:9,num_init_featur:9,num_inst:[5,6],num_param:[11,12],num_queri:[8,11],num_train_cam:5,num_train_pid:[4,5,6],number:[1,5,6,7,9,11,12],numpi:[8,11],obj:11,obtain:11,offici:4,old:2,omni:4,onc:0,one:[3,6,12],onli:[1,2,3,5,6,11,12],only_conv_linear:[11,12],open:[6,7,11,12],open_all_lay:11,open_lay:[6,11,12],open_specified_lay:11,oper:5,optim:[4,6,9,11],option:[5,6,7,8,9,10,11],org:[2,5],organ:2,origin:[2,5],osp:[11,12],other:[3,5,11,12],otherwis:[1,2],out:4,output:[8,11],over:8,pair:5,paper:[0,4],param:1,paramet:[5,6,7,8,9,10,11,12],paranthes:2,parent:2,pars:[0,5],parse_data:5,parser:4,part:9,patch:5,path:[2,4,5,6,11,12],pcb:[4,9],pcb_p4:9,pcb_p6:9,penalti:10,penultimate_filt:9,peopl:[2,5],per:5,perform:[5,6,11,12],person:[0,2,4,5,6,7,8,9,11,12],pet:5,pid:[5,11,12],pil:[5,11],pip:4,pipelin:6,pkuvmc:[2,5],place:[2,5],pleas:[2,3,4,6,12],png:5,pool:[6,9],pooling_method:6,pose:0,posit:7,practic:12,pre:0,predefin:[3,5],predict:[7,8],prefer:4,prepar:[2,4],prepare_split:5,preprint:4,present:[1,12],pretrain:[4,9,10,11,12],pretrian:11,prevent:12,prid11:[2,5],prid2011:[3,4,5],prid:[3,4,5],prid_2011:2,print:6,print_freq:[4,6,12],print_frequ:6,print_funct:12,probabl:5,probe:2,process:2,product:0,project:[2,5],project_mar:[2,5],project_reid:[2,5],promot:0,propag:12,proper:4,protocol:[2,4],provid:[2,4,5,11,12],pth:[11,12],purpos:5,put:2,pyramid:0,python2:[4,11],python3:[4,11],python:4,pytorch:4,q_camid:8,q_pid:8,qian:9,qmul:[4,5],queri:[2,3,5,6,8,11],queryload:6,rand:8,random2dtransl:[1,5],random:[0,3,5],random_eras:5,randomeras:5,randomhorizontalflip:1,randomidentitysampl:[5,6,12],randomli:[3,5,10,12],randomsampl:[5,12],rang:6,rank1:11,rank:[1,2,4,5,6,11],ranklogg:11,rate:[6,10],rather:[11,12],ratio:5,reacquisit:5,read:11,read_imag:11,read_json:11,rebuild:4,recognit:[5,9],recommend:[6,8],record:11,reduc:7,reduced_dim:9,reduct:9,redund:[11,12],refer:[2,3,4,5,6,7,9,12],refin:9,regard:[2,12],region:5,regist:[5,12],register_image_dataset:[5,12],register_video_dataset:5,regular:[6,7],reid:[5,6,7,12],reid_evalu:5,reidentif:5,reidtool:11,relat:0,releas:4,relu:[9,12],remov:11,remove_module_from_kei:11,repo:4,report:[2,4],repres:5,represent:9,requir:[4,5,8],required_fil:5,rerank:6,research:[0,2,4,5],residu:9,resiz:5,resnet101:9,resnet152:9,resnet18:9,resnet34:9,resnet50:[1,4,6,9,11,12],resnet50_fc512:[1,9],resnet50mid:[1,9],resnet:[4,9],resnetmid:9,resnext101:9,resnext50:9,resnext50_32x4d:9,resnext50_32x4d_fc512:9,resnext:[4,9],resolut:0,resourc:0,result:[1,2,4,5,6,11],resum:11,resume_from_checkpoint:[11,12],rethink:7,retriev:[0,9],return_dataload:5,return_testdataset_by_nam:5,revisit:0,rgb:5,ristani:5,rmsprop:10,rmsprop_alpha:10,robust:0,roll:0,root:[2,4,5,6,12],run:[4,6,11,12],sai:[10,12],same:[3,5,12],sampl:[5,6],sample_method:5,sandler:9,save:[2,4,6,11,12],save_checkpoint:11,save_dir:[4,6,11,12],scalabl:[5,9],scale:[4,5,9],schedul:[4,6],scia:5,scope:12,scratch:1,script:4,se_resnet101:9,se_resnet152:9,se_resnet50:9,se_resnet50_fc512:[1,9],se_resnext101_32x4d:9,se_resnext50_32x4d:9,search:9,section:[2,12],see:[2,11,12],select:4,self:[6,11,12],semant:0,senet154:9,senet:[4,9],sensereid:[3,4,5],separ:9,seq_len:[5,6],sequenc:2,set:[2,3,5,6,8,11,12],setup:[2,4],sgd:[10,12],sgd_dampen:10,sgd_nesterov:10,shape:[5,7,8,11],share:[3,12],shot:[0,2,5,6,8],should:[2,3,5,6,8,10,12],show:[5,11],show_avai_model:[9,12],show_summari:[5,11],shuffl:0,shufflenet:[1,4,9],similar:[0,3],simpli:12,singl:[2,3,5,6,8],single_shot:2,single_step:[4,6,10],size:[1,4,5,8,9,10,11],smaller:[10,12],smooth:[4,6,7,10],soe:[2,5],soft:0,softmax:[1,4,6,9,11],some:[2,12],some_argu:6,someth:0,sourc:[2,4,5,6,7,8,9,10,11,12],spatial:0,specif:[2,5,12],specifi:[1,2,8,11,12],speed:8,spindl:5,split:[2,3,5,6,8],split_id:[3,5],splits_classic_detect:2,splits_classic_label:2,splits_new_detect:2,splits_new_label:2,splits_prid2011:2,squar:8,squeez:9,squeezenet1_0:9,squeezenet1_0_fc512:[1,9],squeezenet1_1:9,squeezenet:[4,9],staged_lr:[10,12],standard:[2,4,5],start:[3,6],start_epoch:[6,11,12],start_ev:6,state:[4,11],state_dict:11,statist:5,stdout:11,stem_filt:9,step:[10,11],stepsiz:[4,6,10],stepwis:[0,5],store:[2,11],str:[5,6,8,9,10,11,12],strategi:12,string:5,strip:9,strong:9,structur:2,style:0,sub:3,subclass:[5,6],submit:0,subset:12,suggest:[2,12],suit:[4,6],summar:11,summari:11,sun:9,superscript:2,support:[2,4,9,10,11],suppos:[2,12],sys:[11,12],szegedi:[7,9],take:[5,10],tao:4,tar:[11,12],target:[0,5,6,7,8,11,12],team:[2,5],tech:4,techniqu:4,templat:12,tempor:0,tensor:[7,8],test:[2,3,4,5,6,11],test_galleri:2,test_onli:[4,6,12],test_prob:2,testload:[5,6],text:11,tgz:2,than:[2,8,11,12],them:2,theoret:[11,12],thi:[2,4,5,6,8,11,12],three:12,threshold:2,thu:[3,5],time:[3,6,7,11,12],titl:4,tool:12,top:[6,8,11,12],topk:[8,11],torch:[6,7,8],torchreid:[2,3,12],torchtool:11,torchvis:4,total:3,track:[0,5],tracklet:[5,6],train:[0,1,2,3,4,5,6,9,10,11],train_sampl:[5,6,12],trainload:[5,6],transfer:[5,9],transform:9,translat:5,tree:2,triplet:[4,6,9,12],tripletloss:7,truth:[7,8],tugraz:[2,5],tune:12,tupl:[5,8,11,12],two:[2,3,5],txt:[2,4],type:[8,11],typic:12,ucsc:[2,5],under:[2,3,8,12],underground_reid:2,unicodedecodeerror:11,unifi:6,unknown:[0,5],unlabel:5,unless:1,unmatch:11,unsupervis:0,unzip:2,updat:11,url:[5,11],use:[2,5,6,7,8,9,10,12],use_cpu:[5,6],use_cython:8,use_gpu:[7,9],use_metric_cuhk03:[2,6,8],used:[1,2,3,4,5,6,11,12],useful:4,user:2,uses:[6,10],using:[2,3,4,6,8,11,12],util:12,v15:2,valu:[5,8,10,11],vari:3,vector:6,verbos:[5,11,12],version:[4,5,9],via:0,vid:[3,4,5],vid_reid_dataset:[2,5],video:[0,11,12],videodatamanag:[3,5,6],videodataset:[5,12],videoreid:[3,4,5],videosoftmaxengin:[6,12],videotripletengin:[6,12],vidreid:2,view:[3,5,8],viewpoint:0,viper:[3,4,5],vision:[2,5,7],visrank:[6,12],visrank_topk:[6,12],visual:[4,6,11],visualize_ranked_result:11,vitro:5,wai:2,walk:0,wang:5,wanna:[2,4],want:[10,12],wei:5,weight:[1,6,7,9,10,11],weight_decai:10,weight_path:[11,12],weight_t:6,weight_x:6,welcom:0,well:11,what:[2,12],whatev:12,when:[1,2,6,7,8,10,11,12],where:[5,7,12],whether:[6,7,9,11],which:[2,6,8,11,12],whose:2,width:[4,5,6,9,12],width_mult:9,within:12,without:4,work:4,worker:5,worth:12,would:12,wrapper:[8,9,10],write:[11,12],write_json:11,www:[2,5],xception:[4,9],xgwang:[2,5],xiang:4,xiatian:[2,5],xie:9,yang:4,year:4,yml:4,yongxin:4,you:[0,2,4,10,11,12],your:4,yourself:2,zhang:9,zhao:5,zheng:5,zhong:[5,6],zhou2019osnet:4,zhou:4,zhunzhong07:5,zip:2,zoph:9},titles:["Awesome-ReID","Model Zoo","Datasets","Evaluation","Torchreid","torchreid.data","torchreid.engine","torchreid.losses","torchreid.metrics","torchreid.models","torchreid.optim","torchreid.utils","How-to"],titleterms:{"new":4,Use:12,aaai:0,accuraci:8,arxiv:0,avail:12,averag:11,awesom:0,base:6,chang:12,choos:12,citat:4,classif:[4,9],combin:12,complex:12,comput:12,conda:4,confer:0,cross:12,cuhk01:2,cuhk03:2,cvpr:0,dagger:2,data:5,dataset:[2,4,5,12],design:12,differ:12,distanc:8,dukemtmc:2,dukemtmcreid:2,dukemtmcvidreid:2,eccv:0,engin:[6,12],evalu:[3,12],find:12,galleri:12,gener:11,get:4,grid:2,how:12,ilid:2,ilidsvid:2,imag:[2,3,4,5,6],imagenet:[4,9],indic:4,instal:4,interfac:[4,9],kei:12,layer:12,learn:12,lightweight:[4,9],logger:11,loss:[4,7],lr_schedul:12,manag:5,mar:2,market1501:2,meter:11,metric:8,model:[1,4,9,12],msmt17:2,multipl:12,neurip:0,optim:[10,12],option:4,own:12,prid2011:2,prid:2,qmul:2,queri:12,rank:[8,12],rate:12,reid:[0,2,3,4,9,11],result:12,resum:12,sampler:[5,12],schedul:10,second:4,sensereid:2,show:12,softmax:7,specif:[4,9],start:4,step:12,tabl:4,test:12,tool:11,torch:11,torchreid:[4,5,6,7,8,9,10,11],train:12,transfer:12,transform:5,triplet:7,two:12,unifi:4,util:11,vid:2,video:[2,3,4,5,6],videoreid:2,viper:2,visual:12,your:12,zoo:1}})
\ No newline at end of file
+Search.setIndex({docnames:["AWESOME_REID","MODEL_ZOO","datasets","evaluation","index","pkg/data","pkg/engine","pkg/losses","pkg/metrics","pkg/models","pkg/optim","pkg/utils","user_guide"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.viewcode":1,sphinx:55},filenames:["AWESOME_REID.md","MODEL_ZOO.md","datasets.rst","evaluation.rst","index.rst","pkg/data.rst","pkg/engine.rst","pkg/losses.rst","pkg/metrics.rst","pkg/models.rst","pkg/optim.rst","pkg/utils.rst","user_guide.rst"],objects:{"torchreid.data":{datamanager:[5,0,0,"-"],sampler:[5,0,0,"-"],transforms:[5,0,0,"-"]},"torchreid.data.datamanager":{DataManager:[5,1,1,""],ImageDataManager:[5,1,1,""],VideoDataManager:[5,1,1,""]},"torchreid.data.datamanager.DataManager":{num_train_cams:[5,2,1,""],num_train_pids:[5,2,1,""],return_dataloaders:[5,3,1,""],return_testdataset_by_name:[5,3,1,""]},"torchreid.data.datasets":{__init__:[5,0,0,"-"],dataset:[5,0,0,"-"]},"torchreid.data.datasets.__init__":{init_image_dataset:[5,4,1,""],init_video_dataset:[5,4,1,""],register_image_dataset:[5,4,1,""],register_video_dataset:[5,4,1,""]},"torchreid.data.datasets.dataset":{Dataset:[5,1,1,""],ImageDataset:[5,1,1,""],VideoDataset:[5,1,1,""]},"torchreid.data.datasets.dataset.Dataset":{check_before_run:[5,3,1,""],combine_all:[5,3,1,""],download_dataset:[5,3,1,""],get_num_cams:[5,3,1,""],get_num_pids:[5,3,1,""],parse_data:[5,3,1,""],show_summary:[5,3,1,""]},"torchreid.data.datasets.dataset.ImageDataset":{show_summary:[5,3,1,""]},"torchreid.data.datasets.dataset.VideoDataset":{show_summary:[5,3,1,""]},"torchreid.data.datasets.image":{cuhk01:[5,0,0,"-"],cuhk03:[5,0,0,"-"],dukemtmcreid:[5,0,0,"-"],grid:[5,0,0,"-"],ilids:[5,0,0,"-"],market1501:[5,0,0,"-"],msmt17:[5,0,0,"-"],prid:[5,0,0,"-"],sensereid:[5,0,0,"-"],viper:[5,0,0,"-"]},"torchreid.data.datasets.image.cuhk01":{CUHK01:[5,1,1,""]},"torchreid.data.datasets.image.cuhk01.CUHK01":{prepare_split:[5,3,1,""]},"torchreid.data.datasets.image.cuhk03":{CUHK03:[5,1,1,""]},"torchreid.data.datasets.image.dukemtmcreid":{DukeMTMCreID:[5,1,1,""]},"torchreid.data.datasets.image.grid":{GRID:[5,1,1,""]},"torchreid.data.datasets.image.ilids":{iLIDS:[5,1,1,""]},"torchreid.data.datasets.image.market1501":{Market1501:[5,1,1,""]},"torchreid.data.datasets.image.msmt17":{MSMT17:[5,1,1,""]},"torchreid.data.datasets.image.prid":{PRID:[5,1,1,""]},"torchreid.data.datasets.image.sensereid":{SenseReID:[5,1,1,""]},"torchreid.data.datasets.image.viper":{VIPeR:[5,1,1,""]},"torchreid.data.datasets.video":{dukemtmcvidreid:[5,0,0,"-"],ilidsvid:[5,0,0,"-"],mars:[5,0,0,"-"],prid2011:[5,0,0,"-"]},"torchreid.data.datasets.video.dukemtmcvidreid":{DukeMTMCVidReID:[5,1,1,""]},"torchreid.data.datasets.video.ilidsvid":{iLIDSVID:[5,1,1,""]},"torchreid.data.datasets.video.mars":{Mars:[5,1,1,""]},"torchreid.data.datasets.video.mars.Mars":{combine_all:[5,3,1,""]},"torchreid.data.datasets.video.prid2011":{PRID2011:[5,1,1,""]},"torchreid.data.sampler":{RandomIdentitySampler:[5,1,1,""],build_train_sampler:[5,4,1,""]},"torchreid.data.transforms":{ColorAugmentation:[5,1,1,""],Random2DTranslation:[5,1,1,""],RandomErasing:[5,1,1,""],build_transforms:[5,4,1,""]},"torchreid.engine.engine":{Engine:[6,1,1,""]},"torchreid.engine.engine.Engine":{run:[6,3,1,""],test:[6,3,1,""],train:[6,3,1,""]},"torchreid.engine.image.softmax":{ImageSoftmaxEngine:[6,1,1,""]},"torchreid.engine.image.softmax.ImageSoftmaxEngine":{train:[6,3,1,""]},"torchreid.engine.image.triplet":{ImageTripletEngine:[6,1,1,""]},"torchreid.engine.image.triplet.ImageTripletEngine":{train:[6,3,1,""]},"torchreid.engine.video.softmax":{VideoSoftmaxEngine:[6,1,1,""]},"torchreid.engine.video.triplet":{VideoTripletEngine:[6,1,1,""]},"torchreid.losses":{cross_entropy_loss:[7,0,0,"-"],hard_mine_triplet_loss:[7,0,0,"-"]},"torchreid.losses.cross_entropy_loss":{CrossEntropyLoss:[7,1,1,""]},"torchreid.losses.cross_entropy_loss.CrossEntropyLoss":{forward:[7,3,1,""]},"torchreid.losses.hard_mine_triplet_loss":{TripletLoss:[7,1,1,""]},"torchreid.losses.hard_mine_triplet_loss.TripletLoss":{forward:[7,3,1,""]},"torchreid.metrics":{accuracy:[8,0,0,"-"],distance:[8,0,0,"-"],rank:[8,0,0,"-"]},"torchreid.metrics.accuracy":{accuracy:[8,4,1,""]},"torchreid.metrics.distance":{compute_distance_matrix:[8,4,1,""],cosine_distance:[8,4,1,""],euclidean_squared_distance:[8,4,1,""]},"torchreid.metrics.rank":{evaluate_rank:[8,4,1,""]},"torchreid.models":{__init__:[9,0,0,"-"]},"torchreid.models.__init__":{build_model:[9,4,1,""],show_avai_models:[9,4,1,""]},"torchreid.models.densenet":{DenseNet:[9,1,1,""]},"torchreid.models.hacnn":{HACNN:[9,1,1,""]},"torchreid.models.inceptionresnetv2":{InceptionResNetV2:[9,1,1,""]},"torchreid.models.inceptionv4":{InceptionV4:[9,1,1,""]},"torchreid.models.mlfn":{MLFN:[9,1,1,""]},"torchreid.models.mobilenetv2":{MobileNetV2:[9,1,1,""]},"torchreid.models.mudeep":{MuDeep:[9,1,1,""]},"torchreid.models.nasnet":{NASNetAMobile:[9,1,1,""]},"torchreid.models.pcb":{PCB:[9,1,1,""]},"torchreid.models.resnet":{ResNet:[9,1,1,""]},"torchreid.models.resnetmid":{ResNetMid:[9,1,1,""]},"torchreid.models.senet":{SENet:[9,1,1,""]},"torchreid.models.shufflenet":{ShuffleNet:[9,1,1,""]},"torchreid.models.shufflenetv2":{ShuffleNetV2:[9,1,1,""]},"torchreid.models.squeezenet":{SqueezeNet:[9,1,1,""]},"torchreid.models.xception":{Xception:[9,1,1,""]},"torchreid.optim":{lr_scheduler:[10,0,0,"-"],optimizer:[10,0,0,"-"]},"torchreid.optim.lr_scheduler":{build_lr_scheduler:[10,4,1,""]},"torchreid.optim.optimizer":{build_optimizer:[10,4,1,""]},"torchreid.utils":{avgmeter:[11,0,0,"-"],loggers:[11,0,0,"-"],model_complexity:[11,0,0,"-"],reidtools:[11,0,0,"-"],tools:[11,0,0,"-"],torchtools:[11,0,0,"-"]},"torchreid.utils.avgmeter":{AverageMeter:[11,1,1,""]},"torchreid.utils.loggers":{Logger:[11,1,1,""],RankLogger:[11,1,1,""]},"torchreid.utils.loggers.RankLogger":{show_summary:[11,3,1,""],write:[11,3,1,""]},"torchreid.utils.model_complexity":{compute_model_complexity:[11,4,1,""]},"torchreid.utils.reidtools":{visualize_ranked_results:[11,4,1,""]},"torchreid.utils.tools":{check_isfile:[11,4,1,""],collect_env_info:[11,4,1,""],download_url:[11,4,1,""],mkdir_if_missing:[11,4,1,""],read_image:[11,4,1,""],read_json:[11,4,1,""],write_json:[11,4,1,""]},"torchreid.utils.torchtools":{count_num_param:[11,4,1,""],load_checkpoint:[11,4,1,""],load_pretrained_weights:[11,4,1,""],open_all_layers:[11,4,1,""],open_specified_layers:[11,4,1,""],resume_from_checkpoint:[11,4,1,""],save_checkpoint:[11,4,1,""]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","attribute","Python attribute"],"3":["py","method","Python method"],"4":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:class","2":"py:attribute","3":"py:method","4":"py:function"},terms:{"0b56ofsrvi8hubvjltzkwv2vaowm":5,"10x":8,"500k":[2,5],"50x":9,"abstract":5,"case":[2,5],"class":[5,6,7,9,11,12],"default":[2,4,5,6,7,8,9,10,11,12],"float":[5,6,7,10,11],"function":[5,6,7,8,9,10,11,12],"import":[4,5,6,7,8,9,11,12],"int":[5,6,7,8,9,10,11,12],"new":[2,5,6,10,12],"public":[2,4,5,9,12],"return":[5,8,9,11],"super":12,"true":[2,4,5,6,7,8,9,10,11,12],"while":[3,5,6,10,11,12],Added:4,For:[4,8,12],IDs:5,NAS:9,Not:0,One:[0,5],Such:5,The:[2,3,4,6,9,12],With:7,__future__:12,__getitem__:5,__init__:[5,9,12],_extract_featur:6,_parse_data_for_ev:6,aaai:9,absolut:12,absolute_import:12,abspath:12,access:4,accordingli:2,accuraci:[9,11],accv:5,across:0,activ:[2,4,5],actual:[11,12],adam:[4,6,10],adam_beta1:10,adam_beta2:10,adapt:0,add:[4,5],added:4,addit:2,adopt:[2,12],advanc:4,after:11,aggreg:9,alexnet:9,all:[5,11,12],allow:10,also:[2,4,10,12],alter:5,analysi:[5,11],andrea:4,anoth:12,app:4,appear:5,appli:[7,12],approach:0,architectur:[7,9],area:5,arg:11,argument:[2,3,12],arrai:8,art:4,articl:4,arxiv:[4,7,9],aspect:5,associ:5,asterisk:1,attent:[0,9],attribut:[2,6,10],augment:[1,5],author:4,autom:2,automat:[2,4,11,12],avail:9,averag:6,averagemet:11,avg:6,avgmet:11,avoid:12,awar:0,back:[0,12],backbon:0,background:5,base:[0,5,9,10,12],base_lr_mult:[10,12],baselin:[5,9],basic:12,batch:[4,5,6],batch_siz:[4,5,6,7,8,11,12],batchnorm:12,bbox_test:2,bbox_train:2,becaus:3,been:[4,6,12],befor:[5,6,7,12],begin:7,below:[2,12],benchmark:[5,11],besid:2,best:11,beta:10,between:6,beyond:9,bilinear:5,bischof:[2,5],blob:[7,11],block:9,block_config:9,bmvc:5,bn_size:9,bodi:5,bool:[5,6,7,8,9,10,11],both:[2,4,5,6,11],bottleneck:9,bottom:0,bounding_box_test:2,bounding_box_train:2,bridg:5,build:[4,5,9,10],build_lr_schedul:[4,6,10,12],build_model:[4,6,9,11,12],build_optim:[4,6,10,12],build_train_sampl:5,build_transform:5,built:[4,10],call:[2,6],cam_a:2,cam_b:2,camera:[0,3,5,8,12],camid:[5,11,12],campu:2,can:[0,1,2,3,4,8,10,11,12],captur:[5,8],cavallaro:4,ccloi:[2,5],chang:[2,9],channel:[5,9],check:[5,11],check_before_run:5,check_isfil:11,checkpoint:[11,12],choic:[5,6],chollet:9,cite:4,classic:[3,5,6,8],classif:[1,5,10,11,12],classifi:[10,11,12],click:1,clone:4,cluster:0,cmc:[2,6,8],cnn:9,code:[0,2,4,6,8,11,12],collect:0,collect_env_info:11,color:5,color_aug:5,color_jitt:5,coloraugment:5,com:[2,4,5,7,11],combin:5,combine_al:5,combineal:[5,6,12],common:12,comparison:2,complex:[4,11],comput:[1,2,4,6,7,8,11],compute_distance_matrix:8,compute_model_complex:[11,12],connect:9,consid:[5,11],consist:0,consol:11,constant:10,construct:[11,12],contain:[3,5,6,7,8,11,12],conveni:11,convolut:[9,11],convolutionalneur:5,copi:11,correl:5,correspond:5,cosin:8,cosine_dist:8,count:[6,11,12],count_num_param:11,cpu:[5,6],creat:[2,4,11],crf:0,crop:5,cross:[4,7,9],cross_entropy_loss:7,crossentropyloss:7,cuda:[4,6],cudatoolkit:4,cuhk01:[3,4,5],cuhk03:[3,4,5,6,8,12],cuhk03_classic_split:[2,5],cuhk03_label:[2,5],cuhk03_new_protocol_config_detect:2,cuhk03_new_protocol_config_label:2,cuhk03_releas:2,cuhk:[2,5],cuhk_identif:[2,5],current:[6,9,10,11],cvpr:[5,6,7,9],cysu:[7,11],cython:8,damag:12,dampen:10,data:[1,2,3,4,6,12],data_sourc:5,datamanag:[2,4,5,6,12],dataset:[6,11],dataset_:5,dataset_dir:[2,5,12],dataset_nam:[6,12],dataset_url:5,deal:11,decai:[6,10],decomposit:5,deep:[0,2,4,5,9,12],deeper:5,deepreid:5,def:12,defaul:5,default_pars:4,defens:7,defin:3,delet:2,denot:[2,7,11,12],dens:9,densenet121:9,densenet121_fc512:[1,9],densenet161:9,densenet169:9,densenet201:9,densenet:[4,9],depend:[4,11,12],deprec:11,depthwis:9,descript:5,design:9,desir:5,destin:11,detail:[2,4,6,11,12],detect:[2,5],determin:[10,12],develop:4,deviat:5,devic:[4,7,9],devil:9,dict:[6,11],dictionari:[6,11],differ:[2,10],digit:5,dir:4,directli:[2,3],directori:[2,4,5,6,11],dirnam:11,discard:[11,12],discrimin:5,displai:9,dissect:0,dist_metr:6,distanc:[6,11],distil:0,distmat:[8,11],distractor:[2,5],distractors_500k:2,distrctor:2,divid:3,divis:12,document:4,doing:[2,4,11,12],domain:[0,5,9],done:[3,5,12],download:[1,2,5,11],download_dataset:5,download_url:11,downloads_qmul_ilid:[2,5],downloads_qmul_underground_reid:5,downsample_kernel_s:9,downsample_pad:9,drive:5,drop_rat:9,dropout_p:9,dst:11,duke:2,dukemtmc:[3,4,5,12],dukemtmcreid:[1,5,11,12],dukemtmcvidreid:5,each:[3,5,6,7,8,11,12],easi:[4,12],easili:12,eccv:[5,9],eccvw:5,edu:[2,5],eec:[2,5],effici:9,embed_dim:9,empti:[5,10],enabl:[2,6,8,10,12],enclos:2,end:[0,2,4,6,7,12],engin:4,entropi:[4,7],env:[4,11],environ:4,epoch:[4,6,10,11,12],epsilon:7,equal:5,equat:7,eras:5,estim:[11,12],etc:4,euclidean:[6,8],euclidean_squared_dist:8,eval_freq:[4,6,12],evalu:[2,4,5,6,8,11],evaluate_rank:8,evenli:5,everi:[6,10,11],exampl:[4,5,6,8,9,10,11,12],excit:9,exemplar:0,exist:5,expandus:12,explicitli:5,exploit:[0,5,9],extens:4,extern:11,extra:2,extract:[2,5,11,12],extrem:9,facebookresearch:11,factor:[5,10],factoris:[0,9],fail:2,fair:2,fals:[4,5,6,8,9,10,11,12],favor:11,fc_dim:9,feat_dim:[7,9],featur:[0,4,5,6,7,8,9,11,12],few:12,fewer:9,file:[2,4,5,11],filter:5,filters_multipli:9,find:[0,4],fine:[3,12],first:5,fix:3,fixbase_epoch:[6,12],flop:[11,12],folder:2,follow:[2,4],format:[1,5],forth:3,forward:[7,11,12],four:[2,5],fpath:11,frac:7,frequenc:6,from:[0,1,2,3,6,7,8,9,11,12],frozen:[6,11,12],fusion:[5,9],g_camid:8,g_pid:8,galleri:[2,3,5,6,8,11],galleryload:6,gamma:10,gan:[0,5],gap:5,gener:[0,2,3,5,6,12],get:12,get_num_cam:5,get_num_pid:5,git:4,github:[2,4,5,7,11],give:12,given:[5,11],going:5,googl:5,gpu:[4,7,9],gradient:12,gradual:[0,5],grai:5,graph:[11,12],grid:[3,4,5],ground:[7,8],group:[0,5,9],growth_rat:9,guid:[0,2,5],guidelin:9,hacnn:[1,4,9],handl:11,hard:[4,7],hard_mine_triplet_loss:7,hardwar:[11,12],harm:12,harmoni:[0,9],has:[3,4,5,6,10,12],have:[3,10,12],height:[4,5,6,12],help:2,here:[0,2,12],herman:7,hetero:0,highli:[4,8],highlight:1,hirzer:5,homogen:0,horizont:0,how:[2,5,6,11],howev:[2,12],html:[2,5],http:[2,4,5,7,11],huang:9,human:[0,5],iandola:9,iccv:[5,9],icg:[2,5],idea:12,ident:[3,5,6,8,9,10],identif:[0,4,5,7,9,12],ids:[3,5,12],ignor:[1,11,12],ilid:[3,4,5],ilidsvid:5,imag:[0,9,11,12],imagedatamanag:[2,3,4,5,6,12],imagedataset:[5,12],imagenet:5,images_detect:2,images_label:2,imagesoftmaxengin:[4,6,12],imagetripletengin:[6,12],img:5,img_path:[5,11,12],impact:9,implement:[4,6,11,12],improv:5,incept:[4,7,9],inceptionresnetv2:9,inceptionv4:9,includ:[4,12],incompat:11,incred:4,index:[4,5,7],infer:[11,12],info:[2,11],inform:5,inherit:12,init_image_dataset:5,init_video_dataset:5,initi:[2,5,10,11,12],inplan:9,input1:8,input2:8,input:[1,5,7,11,12],input_3x3:9,input_s:11,instal:8,instanc:[5,6,8,9],instanti:12,institut:[2,5],instruct:4,integ:10,intens:5,interpol:5,intuit:12,invari:0,invert:9,is_best:11,jason:2,jitter:5,join:[11,12],journal:4,json:[2,11],just:12,kaiyang:4,kaiyangzh:4,keep:[3,6,11,12],kei:[2,5,9,11],krizhevski:5,kroneck:0,kwarg:[5,9,12],kz303:2,label:[2,4,5,6,7,8],label_smooth:[4,6,7],larg:[5,12],last:5,last_strid:9,layer:[1,6,9,10,11],layumi:5,lead:5,learn:[0,4,5,6,9,10],learn_region:9,level:[0,9],liangzheng06:2,liangzheng:[2,5],librari:4,lid:2,lids_pedestrian:2,like:[2,12],linear:[9,11],link:[0,2],list:[5,6,8,10,11,12],list_galleri:2,list_queri:2,list_train:2,list_val:2,load:[2,4,9,11,12],load_checkpoint:11,load_pretrained_weight:[11,12],log:[4,6,11,12],log_nam:11,loi:5,longtensor:[7,8],look:2,loss:[1,6,9,11,12],loss_valu:11,lr_schedul:[4,6,10],lrs:[2,5],lrschedul:6,machin:4,main:4,manag:[4,12],manduchi:2,mani:5,manual:2,map:[1,2],mar:[3,4,5,6],margin:[6,7],market1501:[1,3,4,5,6,11,12],market1501_500k:[2,4,5,12],market:[2,4],maskrcnn:11,master:[2,7,11],mat:2,match:[0,2,9,11],matrix:[6,7,8,11],matter:0,max:[4,5,6],max_epoch:[4,6,12],max_rank:8,maximum:[6,8],mean:[1,2,5,6,8,11,12],measur:5,memori:0,metadata:2,method:[2,4,10,11,12],metric:[2,5,6],mid:[4,9],middl:9,might:12,min:5,min_seq_len:5,mine:[4,7],minibatch:11,miss:[0,11],mkdir_if_miss:11,mlfn:[1,4,9],mobil:9,mobilenetv2:[4,9],mobilenetv2_1dot0:[1,9],mobilenetv2_1dot4:[1,9],mode:[2,5,12],model:[0,3,5,6,10,11],model_complex:[11,12],model_s:11,modifi:[2,4],modul:[4,6,9,10,11,12],momentum:10,more:[2,4,6,8,12],most:4,msmt17:[1,3,4,5,12],msmt17_v1:2,msmt17_v2:2,mudeep:[4,9],multi:[0,4,5,9],multi_shot:2,multi_step:10,multilabel:0,multipl:[0,5,10,11],multipli:10,multiscal:9,must:6,mutual:0,my_model:11,name:[2,4,5,6,9,10,11,12],nasnet:[4,9],nasnetamobil:9,nchannel:9,ndarrai:[8,11],necessari:6,need:[2,4,5,6,12],neg:7,nesterov:10,net:[0,5,9,11],network:[0,5,9,11],neural:[5,9,11],new_dataset:[5,12],new_lay:[10,12],newdataset:[5,12],nip:5,node:5,none:[5,6,9,11],nonlinear:9,norm_lay:9,norm_mean:5,norm_std:5,normal:[0,5,6,7,10],normalize_featur:6,note:[3,11,12],now:10,num_class:[4,6,7,8,9,11,12],num_galleri:[8,11],num_group:9,num_init_featur:9,num_inst:[5,6],num_param:[11,12],num_queri:[8,11],num_train_cam:5,num_train_pid:[4,5,6],number:[1,5,6,7,9,11,12],numpi:[8,11],obj:11,obtain:11,offici:4,old:2,omni:4,onc:0,one:[3,6,12],onli:[1,2,3,5,6,11,12],only_conv_linear:[11,12],open:[6,7,11,12],open_all_lay:11,open_lay:[6,11,12],open_specified_lay:11,oper:5,optim:[4,6,9,11],option:[5,6,7,8,9,10,11],org:[2,5],organ:2,origin:[2,5],osp:[11,12],other:[3,5,11,12],otherwis:[1,2],out:4,output:[8,11],over:8,pair:5,paper:[0,4],param:1,paramet:[5,6,7,8,9,10,11,12],paranthes:2,parent:2,pars:[0,5],parse_data:5,parser:4,part:9,patch:5,path:[2,4,5,6,11,12],pcb:[4,9],pcb_p4:9,pcb_p6:9,penalti:10,penultimate_filt:9,peopl:[2,5],per:5,perform:[5,6,11,12],person:[0,2,4,5,6,7,8,9,11,12],pet:5,pid:[5,11,12],pil:[5,11],pip:4,pipelin:6,pkuvmc:[2,5],place:[2,5],pleas:[2,3,4,6,12],png:5,pool:[6,9],pooling_method:6,pose:0,posit:7,practic:[9,12],pre:0,predefin:[3,5],predict:[7,8],prefer:4,prepar:[2,4],prepare_split:5,preprint:4,present:[1,12],pretrain:[4,9,10,11,12],pretrian:11,prevent:12,prid11:[2,5],prid2011:[3,4,5],prid:[3,4,5],prid_2011:2,print_freq:[4,6,12],print_frequ:6,print_funct:12,probabl:5,probe:2,process:2,product:0,project:[2,5],project_mar:[2,5],project_reid:[2,5],promot:0,propag:12,proper:4,protocol:[2,4],provid:[2,4,5,11,12],pth:[11,12],purpos:5,put:2,pyramid:0,python2:[4,11],python3:[4,11],python:4,pytorch:4,q_camid:8,q_pid:8,qian:9,qmul:[4,5],queri:[2,3,5,6,8,11],queryload:6,rand:8,random2dtransl:[1,5],random:[0,3,5],random_eras:5,randomeras:5,randomhorizontalflip:1,randomidentitysampl:[5,6,12],randomli:[3,5,10,12],randomsampl:[5,12],rang:6,rank1:11,rank:[1,2,4,5,6,11],ranklogg:11,rate:[6,10],rather:[11,12],ratio:5,reacquisit:5,read:11,read_imag:11,read_json:11,rebuild:4,recognit:[5,9],recommend:[6,8],record:11,reduc:7,reduced_dim:9,reduct:9,redund:[11,12],refer:[2,3,4,5,6,7,9,12],refin:9,regard:[2,12],region:5,regist:[5,12],register_image_dataset:[5,12],register_video_dataset:5,regular:[6,7],reid:[5,6,7,12],reid_evalu:5,reidentif:5,reidtool:11,relat:0,releas:4,relu:[9,12],remov:11,remove_module_from_kei:11,replace_stride_with_dil:9,repo:4,report:[2,4],repres:5,represent:9,requir:[4,5,8],required_fil:5,rerank:6,research:[0,2,4,5],residu:9,resiz:5,resnet101:9,resnet152:9,resnet18:9,resnet34:9,resnet50:[1,4,6,9,11,12],resnet50_fc512:[1,9],resnet50mid:[1,9],resnet:[4,9],resnetmid:9,resnext101:9,resnext101_32x8d:9,resnext50:9,resnext50_32x4d:9,resnext:4,resolut:0,resourc:0,result:[1,2,4,5,6,11],resum:11,resume_from_checkpoint:[11,12],rethink:7,retriev:[0,9],return_dataload:5,return_testdataset_by_nam:5,revisit:0,rgb:5,ristani:5,rmsprop:10,rmsprop_alpha:10,robust:0,roll:0,root:[2,4,5,6,12],run:[4,6,11,12],sai:[10,12],same:[3,5,12],sampl:[5,6],sample_method:5,sandler:9,save:[2,4,6,11,12],save_checkpoint:11,save_dir:[4,6,11,12],scalabl:[5,9],scale:[4,5,9],schedul:[4,6],scia:5,scope:12,scratch:1,script:4,se_resnet101:9,se_resnet152:9,se_resnet50:9,se_resnet50_fc512:[1,9],se_resnext101_32x4d:9,se_resnext50_32x4d:9,search:9,section:[2,12],see:[2,11,12],select:4,self:[6,11,12],semant:0,senet154:9,senet:[4,9],sensereid:[3,4,5],separ:9,seq_len:[5,6],sequenc:2,set:[2,3,5,6,8,11,12],setup:[2,4],sgd:[10,12],sgd_dampen:10,sgd_nesterov:10,shape:[5,7,8,11],share:[3,12],shot:[0,2,5,6,8],should:[2,3,5,6,8,10,12],show:[5,11],show_avai_model:[9,12],show_summari:[5,11],shuffl:0,shufflenet:[1,4,9],shufflenet_v2_x0_5:9,shufflenet_v2_x1_0:9,shufflenet_v2_x1_5:9,shufflenet_v2_x2_0:9,shufflenetv2:9,similar:[0,3],simpli:12,singl:[2,3,5,6,8],single_shot:2,single_step:[4,6,10],size:[1,4,5,8,9,10,11],smaller:[10,12],smooth:[4,6,7,10],soe:[2,5],soft:0,softmax:[1,4,6,9,11],some:[2,12],some_argu:6,someth:0,sourc:[2,4,5,6,7,8,9,10,11,12],spatial:0,specif:[2,5,12],specifi:[1,2,8,11,12],speed:8,spindl:5,split:[2,3,5,6,8],split_id:[3,5],splits_classic_detect:2,splits_classic_label:2,splits_new_detect:2,splits_new_label:2,splits_prid2011:2,squar:8,squeez:9,squeezenet1_0:9,squeezenet1_0_fc512:[1,9],squeezenet1_1:9,squeezenet:[4,9],staged_lr:[10,12],stages_out_channel:9,stages_repeat:9,standard:[2,4,5],start:[3,6],start_epoch:[6,11,12],start_ev:6,state:[4,11],state_dict:11,statist:5,stdout:11,stem_filt:9,step:[10,11],stepsiz:[4,6,10],stepwis:[0,5],store:[2,11],str:[5,6,8,9,10,11,12],strategi:12,string:[5,11],strip:9,strong:9,structur:2,style:0,sub:3,subclass:[5,6],submit:0,subset:12,suggest:[2,12],suit:[4,6],summar:11,summari:11,sun:9,superscript:2,support:[2,4,9,10,11],suppos:[2,12],sys:[11,12],szegedi:[7,9],take:[5,10],tao:4,tar:[11,12],target:[0,5,6,7,8,11,12],team:[2,5],tech:4,techniqu:4,templat:12,tempor:0,tensor:[7,8],test:[2,3,4,5,6,11],test_galleri:2,test_onli:[4,6,12],test_prob:2,testload:[5,6],text:11,tgz:2,than:[2,8,11,12],them:2,theoret:[11,12],thi:[2,4,5,6,8,11,12],three:12,threshold:2,thu:[3,5],time:[3,6,7,11,12],titl:4,tool:12,top:[6,8,11,12],topk:[8,11],torch:[6,7,8],torchreid:[2,3,12],torchtool:11,torchvis:4,total:3,track:[0,5],tracklet:[5,6],train:[0,1,2,3,4,5,6,9,10,11],train_sampl:[5,6,12],trainload:[5,6],transfer:[5,9],transform:9,translat:5,tree:2,triplet:[4,6,9,12],tripletloss:7,truth:[7,8],tugraz:[2,5],tune:12,tupl:[5,8,11,12],two:[2,3,5],txt:[2,4],type:[8,11],typic:12,ucsc:[2,5],under:[2,3,8,12],underground_reid:2,unicodedecodeerror:11,unifi:6,unknown:[0,5],unlabel:5,unless:1,unmatch:11,unsupervis:0,unzip:2,updat:11,url:[5,11],use:[2,5,6,7,8,9,10,12],use_cpu:[5,6],use_cython:8,use_gpu:[7,9],use_metric_cuhk03:[2,6,8],used:[1,2,3,4,5,6,11,12],useful:4,user:2,uses:[6,10],using:[2,3,4,6,8,11,12],util:12,v15:2,valu:[5,8,10,11],vari:3,vector:6,verbos:[5,11,12],version:[4,5,9],via:0,vid:[3,4,5],vid_reid_dataset:[2,5],video:[0,11,12],videodatamanag:[3,5,6],videodataset:[5,12],videoreid:[3,4,5],videosoftmaxengin:[6,12],videotripletengin:[6,12],vidreid:2,view:[3,5,8],viewpoint:0,viper:[3,4,5],vision:[2,5,7],visrank:[6,12],visrank_topk:[6,12],visual:[4,6,11],visualize_ranked_result:11,vitro:5,wai:2,walk:0,wang:5,wanna:[2,4],want:[10,12],wei:5,weight:[1,6,7,9,10,11],weight_decai:10,weight_path:[11,12],weight_t:6,weight_x:6,welcom:0,well:11,what:[2,12],whatev:12,when:[1,2,6,7,8,10,11,12],where:[5,7,12],whether:[7,9,11],which:[2,6,8,11,12],whose:2,width:[4,5,6,9,12],width_mult:9,width_per_group:9,within:12,without:4,work:4,worker:5,worth:12,would:12,wrapper:[8,9,10],write:[11,12],write_json:11,www:[2,5],xception:[4,9],xgwang:[2,5],xiang:4,xiatian:[2,5],xie:9,yang:4,year:4,yml:4,yongxin:4,you:[0,2,4,10,11,12],your:4,yourself:2,zero_init_residu:9,zhang:9,zhao:5,zheng:5,zhong:[5,6],zhou2019osnet:4,zhou:4,zhunzhong07:5,zip:2,zoph:9},titles:["Awesome-ReID","Model Zoo","Datasets","Evaluation","Torchreid","torchreid.data","torchreid.engine","torchreid.losses","torchreid.metrics","torchreid.models","torchreid.optim","torchreid.utils","How-to"],titleterms:{"new":4,Use:12,aaai:0,accuraci:8,arxiv:0,avail:12,averag:11,awesom:0,base:6,chang:12,choos:12,citat:4,classif:[4,9],combin:12,complex:12,comput:12,conda:4,confer:0,cross:12,cuhk01:2,cuhk03:2,cvpr:0,dagger:2,data:5,dataset:[2,4,5,12],design:12,differ:12,distanc:8,dukemtmc:2,dukemtmcreid:2,dukemtmcvidreid:2,eccv:0,engin:[6,12],evalu:[3,12],find:12,galleri:12,gener:11,get:4,grid:2,how:12,ilid:2,ilidsvid:2,imag:[2,3,4,5,6],imagenet:[4,9],indic:4,instal:4,interfac:[4,9],kei:12,layer:12,learn:12,lightweight:[4,9],logger:11,loss:[4,7],lr_schedul:12,manag:5,mar:2,market1501:2,meter:11,metric:8,model:[1,4,9,12],msmt17:2,multipl:12,neurip:0,optim:[10,12],option:4,own:12,prid2011:2,prid:2,qmul:2,queri:12,rank:[8,12],rate:12,reid:[0,2,3,4,9,11],result:12,resum:12,sampler:[5,12],schedul:10,second:4,sensereid:2,show:12,softmax:7,specif:[4,9],start:4,step:12,tabl:4,test:12,tool:11,torch:11,torchreid:[4,5,6,7,8,9,10,11],train:12,transfer:12,transform:5,triplet:7,two:12,unifi:4,util:11,vid:2,video:[2,3,4,5,6],videoreid:2,viper:2,visual:12,your:12,zoo:1}})
\ No newline at end of file
diff --git a/user_guide.html b/user_guide.html
index 14dd10d..8f818ea 100644
--- a/user_guide.html
+++ b/user_guide.html
@@ -8,7 +8,7 @@
- How-to — torchreid 0.7.6 documentation
+ How-to — torchreid 0.7.7 documentation
@@ -61,7 +61,7 @@
- 0.7.6
+ 0.7.7