baiyinnamula commited on
Commit
0cba260
·
verified ·
1 Parent(s): b0a8288

Upload model

Browse files
Files changed (3) hide show
  1. config.json +4 -0
  2. configuration_resnet.py +34 -0
  3. modeling_resnet.py +69 -0
config.json CHANGED
@@ -2,6 +2,10 @@
2
  "architectures": [
3
  "ResnetModelForImageClassification"
4
  ],
 
 
 
 
5
  "avg_down": true,
6
  "base_width": 64,
7
  "block_type": "bottleneck",
 
2
  "architectures": [
3
  "ResnetModelForImageClassification"
4
  ],
5
+ "auto_map": {
6
+ "AutoConfig": "configuration_resnet.ResnetConfig",
7
+ "AutoModelForImageClassification": "modeling_resnet.ResnetModelForImageClassification"
8
+ },
9
  "avg_down": true,
10
  "base_width": 64,
11
  "block_type": "bottleneck",
configuration_resnet.py ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from transformers import PretrainedConfig
2
+ from typing import List
3
+
4
+ class ResnetConfig(PretrainedConfig):
5
+ model_type = "resnet"
6
+
7
+ def __init__(
8
+ self,
9
+ block_type="bottleneck",
10
+ layers: List[int] = [3, 4, 6, 3],
11
+ num_classes: int = 1000,
12
+ input_channels: int = 3,
13
+ cardinality: int = 1,
14
+ base_width: int = 64,
15
+ stem_width: int = 64,
16
+ stem_type: str = "",
17
+ avg_down: bool = False,
18
+ **kwargs,
19
+ ):
20
+ if block_type not in ["basic", "bottleneck"]:
21
+ raise ValueError(f"`block_type` must be 'basic' or bottleneck', got {block_type}.")
22
+ if stem_type not in ["", "deep", "deep-tiered"]:
23
+ raise ValueError(f"`stem_type` must be '', 'deep' or 'deep-tiered', got {stem_type}.")
24
+
25
+ self.block_type = block_type
26
+ self.layers = layers
27
+ self.num_classes = num_classes
28
+ self.input_channels = input_channels
29
+ self.cardinality = cardinality
30
+ self.base_width = base_width
31
+ self.stem_width = stem_width
32
+ self.stem_type = stem_type
33
+ self.avg_down = avg_down
34
+ super().__init__(**kwargs)
modeling_resnet.py ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from transformers import PreTrainedModel
2
+ from timm.models.resnet import BasicBlock, Bottleneck, ResNet
3
+ from .configuration_resnet import ResnetConfig
4
+ import timm
5
+
6
+ BLOCK_MAPPING = {"basic": BasicBlock, "bottleneck": Bottleneck}
7
+
8
+ class ResnetModel(PreTrainedModel):
9
+ config_class = ResnetConfig
10
+
11
+ def __init__(self, config):
12
+ super().__init__(config)
13
+ block_layer = BLOCK_MAPPING[config.block_type]
14
+ self.model = ResNet(
15
+ block_layer,
16
+ config.layers,
17
+ num_classes=config.num_classes,
18
+ in_chans=config.input_channels,
19
+ cardinality=config.cardinality,
20
+ base_width=config.base_width,
21
+ stem_width=config.stem_width,
22
+ stem_type=config.stem_type,
23
+ avg_down=config.avg_down,
24
+ )
25
+
26
+ def forward(self, tensor):
27
+ return self.model.forward_features(tensor)
28
+
29
+ import torch
30
+
31
+ class ResnetModelForImageClassification(PreTrainedModel):
32
+ config_class = ResnetConfig
33
+
34
+ def __init__(self, config):
35
+ super().__init__(config)
36
+ block_layer = BLOCK_MAPPING[config.block_type]
37
+ self.model = ResNet(
38
+ block_layer,
39
+ config.layers,
40
+ num_classes=config.num_classes,
41
+ in_chans=config.input_channels,
42
+ cardinality=config.cardinality,
43
+ base_width=config.base_width,
44
+ stem_width=config.stem_width,
45
+ stem_type=config.stem_type,
46
+ avg_down=config.avg_down,
47
+ )
48
+
49
+ def forward(self, tensor, labels=None):
50
+ logits = self.model(tensor)
51
+ if labels is not None:
52
+ loss = torch.nn.functional.cross_entropy(logits, labels)
53
+ return {"loss": loss, "logits": logits}
54
+ return {"logits": logits}
55
+
56
+
57
+
58
+ # from transformers import AutoConfig, AutoModel, AutoModelForImageClassification
59
+
60
+ # AutoConfig.register("resnet", ResnetConfig)
61
+ # AutoModel.register(ResnetConfig, ResnetModel)
62
+ # AutoModelForImageClassification.register(ResnetConfig, ResnetModelForImageClassification)
63
+
64
+ # resnet50d_config = ResnetConfig(block_type="bottleneck", stem_width=32, stem_type="deep", avg_down=True)
65
+ # resnet50d = ResnetModelForImageClassification(resnet50d_config)
66
+
67
+ # pretrained_model = timm.create_model("resnet50d", pretrained=True)
68
+ # resnet50d.model.load_state_dict(pretrained_model.state_dict())
69
+ # print(resnet50d)