Skip to content

Commit 591a32b

Browse files
committed
Add resnext50_32x4d
1 parent 3fc49a5 commit 591a32b

File tree

5 files changed

+426
-1
lines changed

5 files changed

+426
-1
lines changed

pretrainedmodels/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from .models.fbresnet import fbresnet152
1212
from .models.cafferesnet import cafferesnet101
1313
from .models.bninception import bninception
14+
from .models.resnext import resnext50_32x4d
1415
from .models.resnext import resnext101_32x4d
1516
from .models.resnext import resnext101_64x4d
1617
from .models.inceptionv4 import inceptionv4

pretrainedmodels/models/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
from .bninception import bninception
77

8+
from .resnext import resnext50_32x4d
89
from .resnext import resnext101_32x4d
910
from .resnext import resnext101_64x4d
1011

pretrainedmodels/models/resnext.py

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,26 @@
33
import torch
44
import torch.nn as nn
55
import torch.utils.model_zoo as model_zoo
6+
from .resnext_features import resnext50_32x4d_features
67
from .resnext_features import resnext101_32x4d_features
78
from .resnext_features import resnext101_64x4d_features
89

9-
__all__ = ['ResNeXt101_32x4d', 'resnext101_32x4d',
10+
__all__ = ['ResNeXt50_32x4d', 'resnext50_32x4d',
11+
'ResNeXt101_32x4d', 'resnext101_32x4d',
1012
'ResNeXt101_64x4d', 'resnext101_64x4d']
1113

1214
pretrained_settings = {
15+
'resnext50_32x4d': {
16+
'imagenet': {
17+
'url': 'file:/data/resnext50_32x4d-dc76b0bd094076dae.pth', # TODO (barrh): upload model,
18+
'input_space': 'RGB',
19+
'input_size': [3, 224, 224],
20+
'input_range': [0, 1],
21+
'mean': [0.485, 0.456, 0.406],
22+
'std': [0.229, 0.224, 0.225],
23+
'num_classes': 1000
24+
}
25+
},
1326
'resnext101_32x4d': {
1427
'imagenet': {
1528
'url': 'http://data.lip6.fr/cadene/pretrainedmodels/resnext101_32x4d-29e315fa.pth',
@@ -34,6 +47,27 @@
3447
}
3548
}
3649

50+
class ResNeXt50_32x4d(nn.Module):
51+
52+
def __init__(self, num_classes=1000):
53+
super(ResNeXt50_32x4d, self).__init__()
54+
self.num_classes = num_classes
55+
self.features = resnext50_32x4d_features
56+
self.avg_pool = nn.AvgPool2d((7, 7), (1, 1))
57+
self.last_linear = nn.Linear(2048, num_classes)
58+
59+
def logits(self, input):
60+
x = self.avg_pool(input)
61+
x = x.view(x.size(0), -1)
62+
x = self.last_linear(x)
63+
return x
64+
65+
def forward(self, input):
66+
x = self.features(input)
67+
x = self.logits(x)
68+
return x
69+
70+
3771
class ResNeXt101_32x4d(nn.Module):
3872

3973
def __init__(self, num_classes=1000):
@@ -76,6 +110,20 @@ def forward(self, input):
76110
return x
77111

78112

113+
def resnext50_32x4d(num_classes=1000, pretrained='imagenet'):
114+
model = ResNeXt50_32x4d(num_classes=num_classes)
115+
if pretrained is not None:
116+
settings = pretrained_settings['resnext50_32x4d'][pretrained]
117+
assert num_classes == settings['num_classes'], \
118+
"num_classes should be {}, but is {}".format(settings['num_classes'], num_classes)
119+
model.load_state_dict(model_zoo.load_url(settings['url']))
120+
model.input_space = settings['input_space']
121+
model.input_size = settings['input_size']
122+
model.input_range = settings['input_range']
123+
model.mean = settings['mean']
124+
model.std = settings['std']
125+
return model
126+
79127
def resnext101_32x4d(num_classes=1000, pretrained='imagenet'):
80128
model = ResNeXt101_32x4d(num_classes=num_classes)
81129
if pretrained is not None:
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
from __future__ import print_function, division, absolute_import
2+
from .resnext50_32x4d_features import resnext50_32x4d_features
23
from .resnext101_32x4d_features import resnext101_32x4d_features
34
from .resnext101_64x4d_features import resnext101_64x4d_features

0 commit comments

Comments
 (0)