Skip to content

Commit 96364fc

Browse files
authored
Merge pull request #35 from rwightman/res2net_dla
Add Res2net and DLA models. Update sotabench.
2 parents 7fd0857 + 2680ad1 commit 96364fc

File tree

6 files changed

+837
-83
lines changed

6 files changed

+837
-83
lines changed

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ I've included a few of my favourite models, but this is not an exhaustive collec
2525
* ResNet-18, ResNet-34, ResNet-50, ResNet-101, ResNet-152, ResNeXt50 (32x4d), ResNeXt101 (32x4d and 64x4d)
2626
* 'Bag of Tricks' / Gluon C, D, E, S variations (https://arxiv.org/abs/1812.01187)
2727
* Instagram trained / ImageNet tuned ResNeXt101-32x8d to 32x48d from from [facebookresearch](https://pytorch.org/hub/facebookresearch_WSL-Images_resnext/)
28+
* Res2Net (https://github.com/gasvn/Res2Net, https://arxiv.org/abs/1904.01169)
29+
* DLA
30+
* Original (https://github.com/ucbdrive/dla, https://arxiv.org/abs/1707.06484)
31+
* Res2Net (https://github.com/gasvn/Res2Net, https://arxiv.org/abs/1904.01169)
2832
* DenseNet (from [torchvision](https://github.com/pytorch/vision/tree/master/torchvision/models))
2933
* DenseNet-121, DenseNet-169, DenseNet-201, DenseNet-161
3034
* Squeeze-and-Excitation ResNet/ResNeXt (from [Cadene](https://github.com/Cadene/pretrained-models.pytorch) with some pretrained weight additions by myself)

sotabench.py

Lines changed: 112 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,14 @@ def _entry(model_name, paper_model_name, paper_arxiv_id, batch_size=BATCH_SIZE,
1919
ttp=ttp,
2020
args=args)
2121

22-
22+
# NOTE For any original PyTorch models, I'll remove from this list when you add to sotabench to
23+
# avoid overlap and confusion. Please contact me.
2324
model_list = [
24-
#_entry('adv_inception_v3', 'Adversarial Inception V3', ),
25-
#_entry('densenet121'), # same weights as torchvision
26-
#_entry('densenet161'), # same weights as torchvision
27-
#_entry('densenet169'), # same weights as torchvision
28-
#_entry('densenet201'), # same weights as torchvision
25+
## Weights ported by myself from other frameworks or trained myself in PyTorch
26+
_entry('adv_inception_v3', 'Adversarial Inception V3', '1611.01236',
27+
model_desc='Ported from official Tensorflow weights'),
28+
_entry('ens_adv_inception_resnet_v2', 'Ensemble Adversarial Inception V3', '1705.07204',
29+
model_desc='Ported from official Tensorflow weights'),
2930
_entry('dpn68', 'DPN-68 (224x224)', '1707.01629'),
3031
_entry('dpn68b', 'DPN-68b (224x224)', '1707.01629'),
3132
_entry('dpn92', 'DPN-92 (224x224)', '1707.01629'),
@@ -45,74 +46,57 @@ def _entry(model_name, paper_model_name, paper_arxiv_id, batch_size=BATCH_SIZE,
4546
_entry('efficientnet_b0', 'EfficientNet-B0', '1905.11946'),
4647
_entry('efficientnet_b1', 'EfficientNet-B1', '1905.11946'),
4748
_entry('efficientnet_b2', 'EfficientNet-B2', '1905.11946'),
48-
#_entry('ens_adv_inception_resnet_v2', 'Ensemble Adversarial Inception V3'),
49-
_entry('fbnetc_100', 'FBNet-C', '1812.03443'),
50-
_entry('gluon_inception_v3', 'Inception V3', '1512.00567'),
49+
_entry('fbnetc_100', 'FBNet-C', '1812.03443',
50+
model_desc='Trained in PyTorch with RMSProp, exponential LR decay'),
51+
_entry('gluon_inception_v3', 'Inception V3', '1512.00567', model_desc='Ported from GluonCV Model Zoo'),
5152
_entry('gluon_resnet18_v1b', 'ResNet-18', '1812.01187', model_desc='Ported from GluonCV Model Zoo'),
52-
_entry('gluon_resnet34_v1b', 'ResNet-34', '1812.01187'),
53-
_entry('gluon_resnet50_v1b', 'ResNet-50', '1812.01187'),
54-
_entry('gluon_resnet50_v1c', 'ResNet-50-C', '1812.01187'),
55-
_entry('gluon_resnet50_v1d', 'ResNet-50-D', '1812.01187'),
56-
_entry('gluon_resnet50_v1s', 'ResNet-50-S', '1812.01187'),
57-
_entry('gluon_resnet101_v1b', 'ResNet-101', '1812.01187'),
58-
_entry('gluon_resnet101_v1c', 'ResNet-101-C', '1812.01187'),
59-
_entry('gluon_resnet101_v1d', 'ResNet-101-D', '1812.01187'),
60-
_entry('gluon_resnet101_v1s', 'ResNet-101-S', '1812.01187'),
61-
_entry('gluon_resnet152_v1b', 'ResNet-152', '1812.01187'),
62-
_entry('gluon_resnet152_v1c', 'ResNet-152-C', '1812.01187'),
63-
_entry('gluon_resnet152_v1d', 'ResNet-152-D', '1812.01187'),
64-
_entry('gluon_resnet152_v1s', 'ResNet-152-S', '1812.01187'),
65-
_entry('gluon_resnext50_32x4d', 'ResNeXt-50 32x4d', '1812.01187'),
66-
_entry('gluon_resnext101_32x4d', 'ResNeXt-101 32x4d', '1812.01187'),
67-
_entry('gluon_resnext101_64x4d', 'ResNeXt-101 64x4d', '1812.01187'),
68-
_entry('gluon_senet154', 'SENet-154', '1812.01187'),
69-
_entry('gluon_seresnext50_32x4d', 'SE-ResNeXt-50 32x4d', '1812.01187'),
70-
_entry('gluon_seresnext101_32x4d', 'SE-ResNeXt-101 32x4d', '1812.01187'),
71-
_entry('gluon_seresnext101_64x4d', 'SE-ResNeXt-101 64x4d', '1812.01187'),
72-
_entry('gluon_xception65', 'Modified Aligned Xception', '1802.02611', batch_size=BATCH_SIZE//2),
73-
_entry('ig_resnext101_32x8d', 'ResNeXt-101 32x8d', '1805.00932'),
74-
_entry('ig_resnext101_32x16d', 'ResNeXt-101 32x16d', '1805.00932'),
75-
_entry('ig_resnext101_32x32d', 'ResNeXt-101 32x32d', '1805.00932', batch_size=BATCH_SIZE//2),
76-
_entry('ig_resnext101_32x48d', 'ResNeXt-101 32x48d', '1805.00932', batch_size=BATCH_SIZE//4),
77-
_entry('inception_resnet_v2', 'Inception ResNet V2', '1602.07261'),
78-
#_entry('inception_v3', paper_model_name='Inception V3', ), # same weights as torchvision
79-
_entry('inception_v4', 'Inception V4', '1602.07261'),
53+
_entry('gluon_resnet34_v1b', 'ResNet-34', '1812.01187', model_desc='Ported from GluonCV Model Zoo'),
54+
_entry('gluon_resnet50_v1b', 'ResNet-50', '1812.01187', model_desc='Ported from GluonCV Model Zoo'),
55+
_entry('gluon_resnet50_v1c', 'ResNet-50-C', '1812.01187', model_desc='Ported from GluonCV Model Zoo'),
56+
_entry('gluon_resnet50_v1d', 'ResNet-50-D', '1812.01187', model_desc='Ported from GluonCV Model Zoo'),
57+
_entry('gluon_resnet50_v1s', 'ResNet-50-S', '1812.01187', model_desc='Ported from GluonCV Model Zoo'),
58+
_entry('gluon_resnet101_v1b', 'ResNet-101', '1812.01187', model_desc='Ported from GluonCV Model Zoo'),
59+
_entry('gluon_resnet101_v1c', 'ResNet-101-C', '1812.01187', model_desc='Ported from GluonCV Model Zoo'),
60+
_entry('gluon_resnet101_v1d', 'ResNet-101-D', '1812.01187', model_desc='Ported from GluonCV Model Zoo'),
61+
_entry('gluon_resnet101_v1s', 'ResNet-101-S', '1812.01187', model_desc='Ported from GluonCV Model Zoo'),
62+
_entry('gluon_resnet152_v1b', 'ResNet-152', '1812.01187', model_desc='Ported from GluonCV Model Zoo'),
63+
_entry('gluon_resnet152_v1c', 'ResNet-152-C', '1812.01187', model_desc='Ported from GluonCV Model Zoo'),
64+
_entry('gluon_resnet152_v1d', 'ResNet-152-D', '1812.01187', model_desc='Ported from GluonCV Model Zoo'),
65+
_entry('gluon_resnet152_v1s', 'ResNet-152-S', '1812.01187', model_desc='Ported from GluonCV Model Zoo'),
66+
_entry('gluon_resnext50_32x4d', 'ResNeXt-50 32x4d', '1812.01187', model_desc='Ported from GluonCV Model Zoo'),
67+
_entry('gluon_resnext101_32x4d', 'ResNeXt-101 32x4d', '1812.01187', model_desc='Ported from GluonCV Model Zoo'),
68+
_entry('gluon_resnext101_64x4d', 'ResNeXt-101 64x4d', '1812.01187', model_desc='Ported from GluonCV Model Zoo'),
69+
_entry('gluon_senet154', 'SENet-154', '1812.01187', model_desc='Ported from GluonCV Model Zoo'),
70+
_entry('gluon_seresnext50_32x4d', 'SE-ResNeXt-50 32x4d', '1812.01187', model_desc='Ported from GluonCV Model Zoo'),
71+
_entry('gluon_seresnext101_32x4d', 'SE-ResNeXt-101 32x4d', '1812.01187', model_desc='Ported from GluonCV Model Zoo'),
72+
_entry('gluon_seresnext101_64x4d', 'SE-ResNeXt-101 64x4d', '1812.01187', model_desc='Ported from GluonCV Model Zoo'),
73+
_entry('gluon_xception65', 'Modified Aligned Xception', '1802.02611', batch_size=BATCH_SIZE//2,
74+
model_desc='Ported from GluonCV Model Zoo'),
75+
_entry('mixnet_xl', 'MixNet-XL', '1907.09595', model_desc="My own scaling beyond paper's MixNet Large"),
8076
_entry('mixnet_l', 'MixNet-L', '1907.09595'),
8177
_entry('mixnet_m', 'MixNet-M', '1907.09595'),
8278
_entry('mixnet_s', 'MixNet-S', '1907.09595'),
8379
_entry('mnasnet_100', 'MnasNet-B1', '1807.11626'),
8480
_entry('mobilenetv3_100', 'MobileNet V3(1.0)', '1905.02244',
85-
model_desc='Trained from scratch in PyTorch with RMSProp, exponential LR decay, and hyper-params matching'
86-
' paper as closely as possible.'),
87-
_entry('nasnetalarge', 'NASNet-A Large', '1707.07012', batch_size=BATCH_SIZE//4),
88-
_entry('pnasnet5large', 'PNASNet-5', '1712.00559', batch_size=BATCH_SIZE//4),
81+
model_desc='Trained in PyTorch with RMSProp, exponential LR decay, and hyper-params matching '
82+
'paper as closely as possible.'),
8983
_entry('resnet18', 'ResNet-18', '1812.01187'),
90-
_entry('resnet26', 'ResNet-26', '1812.01187'),
91-
_entry('resnet26d', 'ResNet-26-D', '1812.01187'),
84+
_entry('resnet26', 'ResNet-26', '1812.01187', model_desc='Block cfg of ResNet-34 w/ Bottleneck'),
85+
_entry('resnet26d', 'ResNet-26-D', '1812.01187',
86+
model_desc='Block cfg of ResNet-34 w/ Bottleneck, deep stem, and avg-pool in downsample layers.'),
9287
_entry('resnet34', 'ResNet-34', '1812.01187'),
9388
_entry('resnet50', 'ResNet-50', '1812.01187'),
94-
#_entry('resnet101', , ), # same weights as torchvision
95-
#_entry('resnet152', , ), # same weights as torchvision
9689
_entry('resnext50_32x4d', 'ResNeXt-50 32x4d', '1812.01187'),
9790
_entry('resnext50d_32x4d', 'ResNeXt-50-D 32x4d', '1812.01187',
98-
model_desc="""'D' variant (3x3 deep stem w/ avg-pool downscale)
99-
Trained with:
100-
* SGD w/ cosine LR decay
101-
* Random-erasing (gaussian per-pixel noise)
102-
* Label-smoothing
103-
"""),
104-
#_entry('resnext101_32x8d', ), # same weights as torchvision
91+
model_desc="'D' variant (3x3 deep stem w/ avg-pool downscale). Trained with "
92+
"SGD w/ cosine LR decay, random-erasing (gaussian per-pixel noise) and label-smoothing"),
10593
_entry('semnasnet_100', 'MnasNet-A1', '1807.11626'),
106-
_entry('senet154', 'SENet-154', '1709.01507'),
10794
_entry('seresnet18', 'SE-ResNet-18', '1709.01507'),
10895
_entry('seresnet34', 'SE-ResNet-34', '1709.01507'),
109-
_entry('seresnet50', 'SE-ResNet-50', '1709.01507'),
110-
_entry('seresnet101', 'SE-ResNet-101', '1709.01507'),
111-
_entry('seresnet152', 'SE-ResNet-152', '1709.01507'),
112-
_entry('seresnext26_32x4d', 'SE-ResNeXt-26 32x4d', '1709.01507'),
113-
_entry('seresnext50_32x4d', 'SE-ResNeXt-50 32x4d', '1709.01507'),
114-
_entry('seresnext101_32x4d', 'SE-ResNeXt-101 32x4d', '1709.01507'),
115-
_entry('spnasnet_100', 'Single-Path NAS', '1904.02877'),
96+
_entry('seresnext26_32x4d', 'SE-ResNeXt-26 32x4d', '1709.01507',
97+
model_desc='Block cfg of SE-ResNeXt-34 w/ Bottleneck, deep stem, and avg-pool in downsample layers.'),
98+
_entry('spnasnet_100', 'Single-Path NAS', '1904.02877',
99+
model_desc='Trained in PyTorch with SGD, cosine LR decay'),
116100
_entry('tf_efficientnet_b0', 'EfficientNet-B0 (AutoAugment)', '1905.11946',
117101
model_desc='Ported from official Google AI Tensorflow weights'),
118102
_entry('tf_efficientnet_b1', 'EfficientNet-B1 (AutoAugment)', '1905.11946',
@@ -135,18 +119,76 @@ def _entry(model_name, paper_model_name, paper_arxiv_id, batch_size=BATCH_SIZE,
135119
model_desc='Ported from official Google AI Tensorflow weights'),
136120
_entry('tf_efficientnet_el', 'EfficientNet-EdgeTPU-L', '1905.11946', batch_size=BATCH_SIZE//2,
137121
model_desc='Ported from official Google AI Tensorflow weights'),
138-
_entry('tf_inception_v3', 'Inception V3', '1512.00567'),
139-
_entry('tf_mixnet_l', 'MixNet-L', '1907.09595'),
140-
_entry('tf_mixnet_m', 'MixNet-M', '1907.09595'),
141-
_entry('tf_mixnet_s', 'MixNet-S', '1907.09595'),
142-
#_entry('tv_resnet34', , ), # same weights as torchvision
143-
#_entry('tv_resnet50', , ), # same weights as torchvision
144-
#_entry('tv_resnext50_32x4d', , ), # same weights as torchvision
145-
#_entry('wide_resnet50_2' , ), # same weights as torchvision
146-
#_entry('wide_resnet101_2', , ), # same weights as torchvision
122+
_entry('tf_inception_v3', 'Inception V3', '1512.00567', model_desc='Ported from official Tensorflow weights'),
123+
_entry('tf_mixnet_l', 'MixNet-L', '1907.09595', model_desc='Ported from official Google AI Tensorflow weights'),
124+
_entry('tf_mixnet_m', 'MixNet-M', '1907.09595', model_desc='Ported from official Google AI Tensorflow weights'),
125+
_entry('tf_mixnet_s', 'MixNet-S', '1907.09595', model_desc='Ported from official Google AI Tensorflow weights'),
126+
127+
## Cadene ported weights (to remove if Cadene adds sotabench)
128+
_entry('inception_resnet_v2', 'Inception ResNet V2', '1602.07261'),
129+
_entry('inception_v4', 'Inception V4', '1602.07261'),
130+
_entry('nasnetalarge', 'NASNet-A Large', '1707.07012', batch_size=BATCH_SIZE // 4),
131+
_entry('pnasnet5large', 'PNASNet-5', '1712.00559', batch_size=BATCH_SIZE // 4),
132+
_entry('seresnet50', 'SE-ResNet-50', '1709.01507'),
133+
_entry('seresnet101', 'SE-ResNet-101', '1709.01507'),
134+
_entry('seresnet152', 'SE-ResNet-152', '1709.01507'),
135+
_entry('seresnext50_32x4d', 'SE-ResNeXt-50 32x4d', '1709.01507'),
136+
_entry('seresnext101_32x4d', 'SE-ResNeXt-101 32x4d', '1709.01507'),
137+
_entry('senet154', 'SENet-154', '1709.01507'),
147138
_entry('xception', 'Xception', '1610.02357'),
148-
]
149139

140+
## Torchvision weights
141+
# _entry('densenet121'),
142+
# _entry('densenet161'),
143+
# _entry('densenet169'),
144+
# _entry('densenet201'),
145+
# _entry('inception_v3', paper_model_name='Inception V3', ),
146+
# _entry('tv_resnet34', , ),
147+
# _entry('tv_resnet50', , ),
148+
# _entry('resnet101', , ),
149+
# _entry('resnet152', , ),
150+
# _entry('tv_resnext50_32x4d', , ),
151+
# _entry('resnext101_32x8d', ),
152+
# _entry('wide_resnet50_2' , ),
153+
# _entry('wide_resnet101_2', , ),
154+
155+
## Facebook WSL weights
156+
_entry('ig_resnext101_32x8d', 'ResNeXt-101 32x8d', '1805.00932'),
157+
_entry('ig_resnext101_32x16d', 'ResNeXt-101 32x16d', '1805.00932'),
158+
_entry('ig_resnext101_32x32d', 'ResNeXt-101 32x32d', '1805.00932', batch_size=BATCH_SIZE // 2),
159+
_entry('ig_resnext101_32x48d', 'ResNeXt-101 32x48d', '1805.00932', batch_size=BATCH_SIZE // 4),
160+
_entry('ig_resnext101_32x8d (288x288 Mean-Max Pooling)', 'ResNeXt-101 32x8d', '1805.00932',
161+
ttp=True, args=dict(img_size=288)),
162+
_entry('ig_resnext101_32x16d (288x288 Mean-Max Pooling)', 'ResNeXt-101 32x16d', '1805.00932',
163+
ttp=True, args=dict(img_size=288), batch_size=BATCH_SIZE // 2),
164+
_entry('ig_resnext101_32x32d (288x288 Mean-Max Pooling)', 'ResNeXt-101 32x32d', '1805.00932',
165+
ttp=True, args=dict(img_size=288), batch_size=BATCH_SIZE // 4),
166+
_entry('ig_resnext101_32x48d (288x288 Mean-Max Pooling)', 'ResNeXt-101 32x48d', '1805.00932',
167+
ttp=True, args=dict(img_size=288), batch_size=BATCH_SIZE // 8),
168+
169+
## DLA official impl weights (to remove if sotabench added to source)
170+
_entry('dla34', 'DLA-34', '1707.06484'),
171+
_entry('dla46_c', 'DLA-46-C', '1707.06484'),
172+
_entry('dla46x_c', 'DLA-X-46-C', '1707.06484'),
173+
_entry('dla60x_c', 'DLA-X-60-C', '1707.06484'),
174+
_entry('dla60', 'DLA-60', '1707.06484'),
175+
_entry('dla60x', 'DLA-X-60', '1707.06484'),
176+
_entry('dla102', 'DLA-102', '1707.06484'),
177+
_entry('dla102x', 'DLA-X-102', '1707.06484'),
178+
_entry('dla102x2', 'DLA-X-102 64', '1707.06484'),
179+
_entry('dla169', 'DLA-169', '1707.06484'),
180+
181+
## Res2Net official impl weights (to remove if sotabench added to source)
182+
_entry('res2net50_26w_4s', 'Res2Net-50 26x4s', '1904.01169'),
183+
_entry('res2net50_14w_8s', 'Res2Net-50 14x8s', '1904.01169'),
184+
_entry('res2net50_26w_6s', 'Res2Net-50 26x6s', '1904.01169'),
185+
_entry('res2net50_26w_8s', 'Res2Net-50 26x8s', '1904.01169'),
186+
_entry('res2net50_48w_2s', 'Res2Net-50 48x2s', '1904.01169'),
187+
_entry('res2net101_26w_4s', 'Res2NeXt-101 26x4s', '1904.01169'),
188+
_entry('res2next50', 'Res2NeXt-50', '1904.01169'),
189+
_entry('dla60_res2net', 'Res2Net-DLA-60', '1904.01169'),
190+
_entry('dla60_res2next', 'Res2NeXt-DLA-60', '1904.01169'),
191+
]
150192

151193
for m in model_list:
152194
model_name = m['model']

timm/models/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
from .inception_v3 import *
1212
from .gluon_resnet import *
1313
from .gluon_xception import *
14+
from .res2net import *
15+
from .dla import *
1416

1517
from .registry import *
1618
from .factory import create_model

0 commit comments

Comments
 (0)