Skip to content

Commit c40384f

Browse files
committed
Add ResNet weights. 80.5 (top-1) ResNet-50-D, 77.1 ResNet-34-D, 72.7 ResNet-18-D.
1 parent e39bf6e commit c40384f

File tree

2 files changed

+99
-9
lines changed

2 files changed

+99
-9
lines changed

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
## What's New
44

5+
### Sept 18, 2020
6+
* New ResNet 'D' weights. 72.7 (top-1) ResNet-18-D, 77.1 ResNet-34-D, 80.5 ResNet-50-D
7+
* Added a few untrained defs for other ResNet models (66D, 101D, 152D, 200/200D)
8+
59
### Sept 3, 2020
610
* New weights
711
* Wide-ResNet50 - 81.5 top-1 (vs 78.5 torchvision)

timm/models/resnet.py

Lines changed: 95 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,26 +35,37 @@ def _cfg(url='', **kwargs):
3535
default_cfgs = {
3636
# ResNet and Wide ResNet
3737
'resnet18': _cfg(url='https://download.pytorch.org/models/resnet18-5c106cde.pth'),
38+
'resnet18d': _cfg(
39+
url='https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/resnet18d_ra2-48a79e06.pth',
40+
interpolation='bicubic', first_conv='conv1.0'),
3841
'resnet34': _cfg(
3942
url='https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/resnet34-43635321.pth'),
43+
'resnet34d': _cfg(
44+
url='https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/resnet34d_ra2-f8dcfcaf.pth',
45+
interpolation='bicubic', first_conv='conv1.0'),
4046
'resnet26': _cfg(
4147
url='https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/resnet26-9aa10e23.pth',
4248
interpolation='bicubic'),
4349
'resnet26d': _cfg(
4450
url='https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/resnet26d-69e92c46.pth',
45-
interpolation='bicubic',
46-
first_conv='conv1.0'),
51+
interpolation='bicubic', first_conv='conv1.0'),
4752
'resnet50': _cfg(
4853
url='https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/resnet50_ram-a26f946b.pth',
4954
interpolation='bicubic'),
5055
'resnet50d': _cfg(
51-
url='',
52-
interpolation='bicubic',
53-
first_conv='conv1.0'),
54-
'resnet101': _cfg(url='https://download.pytorch.org/models/resnet101-5d3b4d8f.pth'),
55-
'resnet152': _cfg(url='https://download.pytorch.org/models/resnet152-b121ed2d.pth'),
56+
url='https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/resnet50d_ra2-464e36ba.pth',
57+
interpolation='bicubic', first_conv='conv1.0'),
58+
'resnet66d': _cfg(url='', interpolation='bicubic', first_conv='conv1.0'),
59+
'resnet101': _cfg(url='', interpolation='bicubic'),
60+
'resnet101d': _cfg(url='', interpolation='bicubic', first_conv='conv1.0'),
61+
'resnet152': _cfg(url='', interpolation='bicubic'),
62+
'resnet152d': _cfg(url='', interpolation='bicubic', first_conv='conv1.0'),
63+
'resnet200': _cfg(url='', interpolation='bicubic'),
64+
'resnet200d': _cfg(url='', interpolation='bicubic', first_conv='conv1.0'),
5665
'tv_resnet34': _cfg(url='https://download.pytorch.org/models/resnet34-333f7ec4.pth'),
5766
'tv_resnet50': _cfg(url='https://download.pytorch.org/models/resnet50-19c8e357.pth'),
67+
'tv_resnet101': _cfg(url='https://download.pytorch.org/models/resnet101-5d3b4d8f.pth'),
68+
'tv_resnet152': _cfg(url='https://download.pytorch.org/models/resnet152-b121ed2d.pth'),
5869
'wide_resnet50_2': _cfg(
5970
url='https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/wide_resnet50_racm-8234f177.pth',
6071
interpolation='bicubic'),
@@ -613,6 +624,15 @@ def resnet18(pretrained=False, **kwargs):
613624
return _create_resnet('resnet18', pretrained, **model_args)
614625

615626

627+
@register_model
628+
def resnet18d(pretrained=False, **kwargs):
629+
"""Constructs a ResNet-18-D model.
630+
"""
631+
model_args = dict(
632+
block=BasicBlock, layers=[2, 2, 2, 2], stem_width=32, stem_type='deep', avg_down=True, **kwargs)
633+
return _create_resnet('resnet18d', pretrained, **model_args)
634+
635+
616636
@register_model
617637
def resnet34(pretrained=False, **kwargs):
618638
"""Constructs a ResNet-34 model.
@@ -621,6 +641,15 @@ def resnet34(pretrained=False, **kwargs):
621641
return _create_resnet('resnet34', pretrained, **model_args)
622642

623643

644+
@register_model
645+
def resnet34d(pretrained=False, **kwargs):
646+
"""Constructs a ResNet-34-D model.
647+
"""
648+
model_args = dict(
649+
block=BasicBlock, layers=[3, 4, 6, 3], stem_width=32, stem_type='deep', avg_down=True, **kwargs)
650+
return _create_resnet('resnet34d', pretrained, **model_args)
651+
652+
624653
@register_model
625654
def resnet26(pretrained=False, **kwargs):
626655
"""Constructs a ResNet-26 model.
@@ -631,8 +660,7 @@ def resnet26(pretrained=False, **kwargs):
631660

632661
@register_model
633662
def resnet26d(pretrained=False, **kwargs):
634-
"""Constructs a ResNet-26 v1d model.
635-
This is technically a 28 layer ResNet, sticking with 'd' modifier from Gluon for now.
663+
"""Constructs a ResNet-26-D model.
636664
"""
637665
model_args = dict(block=Bottleneck, layers=[2, 2, 2, 2], stem_width=32, stem_type='deep', avg_down=True, **kwargs)
638666
return _create_resnet('resnet26d', pretrained, **model_args)
@@ -655,6 +683,14 @@ def resnet50d(pretrained=False, **kwargs):
655683
return _create_resnet('resnet50d', pretrained, **model_args)
656684

657685

686+
@register_model
687+
def resnet66d(pretrained=False, **kwargs):
688+
"""Constructs a ResNet-66-D model.
689+
"""
690+
model_args = dict(block=BasicBlock, layers=[3, 4, 23, 3], stem_width=32, stem_type='deep', avg_down=True, **kwargs)
691+
return _create_resnet('resnet66d', pretrained, **model_args)
692+
693+
658694
@register_model
659695
def resnet101(pretrained=False, **kwargs):
660696
"""Constructs a ResNet-101 model.
@@ -663,6 +699,14 @@ def resnet101(pretrained=False, **kwargs):
663699
return _create_resnet('resnet101', pretrained, **model_args)
664700

665701

702+
@register_model
703+
def resnet101d(pretrained=False, **kwargs):
704+
"""Constructs a ResNet-101-D model.
705+
"""
706+
model_args = dict(block=Bottleneck, layers=[3, 4, 23, 3], stem_width=32, stem_type='deep', avg_down=True, **kwargs)
707+
return _create_resnet('resnet101d', pretrained, **model_args)
708+
709+
666710
@register_model
667711
def resnet152(pretrained=False, **kwargs):
668712
"""Constructs a ResNet-152 model.
@@ -671,6 +715,32 @@ def resnet152(pretrained=False, **kwargs):
671715
return _create_resnet('resnet152', pretrained, **model_args)
672716

673717

718+
@register_model
719+
def resnet152d(pretrained=False, **kwargs):
720+
"""Constructs a ResNet-152-D model.
721+
"""
722+
model_args = dict(
723+
block=Bottleneck, layers=[3, 8, 36, 3], stem_width=32, stem_type='deep', avg_down=True, **kwargs)
724+
return _create_resnet('resnet152d', pretrained, **model_args)
725+
726+
727+
@register_model
728+
def resnet200(pretrained=False, **kwargs):
729+
"""Constructs a ResNet-200 model.
730+
"""
731+
model_args = dict(block=Bottleneck, layers=[3, 24, 36, 3], **kwargs)
732+
return _create_resnet('resnet200', pretrained, **model_args)
733+
734+
735+
@register_model
736+
def resnet200d(pretrained=False, **kwargs):
737+
"""Constructs a ResNet-200-D model.
738+
"""
739+
model_args = dict(
740+
block=Bottleneck, layers=[3, 24, 36, 3], stem_width=32, stem_type='deep', avg_down=True, **kwargs)
741+
return _create_resnet('resnet200d', pretrained, **model_args)
742+
743+
674744
@register_model
675745
def tv_resnet34(pretrained=False, **kwargs):
676746
"""Constructs a ResNet-34 model with original Torchvision weights.
@@ -687,6 +757,22 @@ def tv_resnet50(pretrained=False, **kwargs):
687757
return _create_resnet('tv_resnet50', pretrained, **model_args)
688758

689759

760+
@register_model
761+
def tv_resnet101(pretrained=False, **kwargs):
762+
"""Constructs a ResNet-101 model w/ Torchvision pretrained weights.
763+
"""
764+
model_args = dict(block=Bottleneck, layers=[3, 4, 23, 3], **kwargs)
765+
return _create_resnet('tv_resnet101', pretrained, **model_args)
766+
767+
768+
@register_model
769+
def tv_resnet152(pretrained=False, **kwargs):
770+
"""Constructs a ResNet-152 model w/ Torchvision pretrained weights.
771+
"""
772+
model_args = dict(block=Bottleneck, layers=[3, 8, 36, 3], **kwargs)
773+
return _create_resnet('tv_resnet152', pretrained, **model_args)
774+
775+
690776
@register_model
691777
def wide_resnet50_2(pretrained=False, **kwargs):
692778
"""Constructs a Wide ResNet-50-2 model.

0 commit comments

Comments
 (0)