Download training_code/model/resnet.py from ODELIA-AI/Pimed: direct link, hf CLI and curl.
- Browser
- Download file 2.11 kB
-
https://huggingface.co/ODELIA-AI/Pimed/resolve/main/training_code/model/resnet.py
- Command line
-
hf download hf://ODELIA-AI/Pimed/training_code/model/resnet.py
-
curl -L -o resnet.py https://huggingface.co/ODELIA-AI/Pimed/resolve/main/training_code/model/resnet.py
2.11 kB
| import torch | |
| import torch.nn as nn | |
| from monai.networks.nets import ResNet | |
| from monai.networks.nets.resnet import ResNetBlock, ResNetBottleneck | |
| class Resnet(nn.Module): | |
| def __init__(self, model_name: str, num_classes: int, norm: str = "batch"): | |
| super().__init__() | |
| self.model_name = model_name | |
| valid_model_names = ["resnet10", "resnet18", "resnet34", "resnet50", "resnet101", "resnet152", "resnet200"] | |
| assert self.model_name in valid_model_names, f"Model name must be one of {valid_model_names}" | |
| # Get default resnet parameters | |
| # >> model_name: (block, layers, shortcut_type, bias_downsample) | |
| resnet_params = { | |
| "resnet10": ("basic", [1, 1, 1, 1], "B", False), | |
| "resnet18": ("basic", [2, 2, 2, 2], "A", True), | |
| "resnet34": ("basic", [3, 4, 6, 3], "A", True), | |
| "resnet50": ("bottleneck", [3, 4, 6, 3], "B", False), | |
| "resnet101": ("bottleneck", [3, 4, 23, 3], "B", False), | |
| "resnet152": ("bottleneck", [3, 8, 36, 3], "B", False), | |
| "resnet200": ("bottleneck", [3, 24, 36, 3], "B", False), | |
| } | |
| block, layers, shortcut_type, bias_downsample = resnet_params[self.model_name] | |
| block = ResNetBlock if block == "basic" else ResNetBottleneck | |
| # Get default norm parameters | |
| norm_mapper = { | |
| "group": ("group", {"num_groups": 8}), | |
| "instance": ("instance", {"affine": True}), | |
| "batch": "batch" | |
| } | |
| _norm = norm_mapper[norm] | |
| # Create resnet model | |
| self.net = ResNet( | |
| block=block, | |
| layers=layers, | |
| block_inplanes=[64, 128, 256, 512], | |
| spatial_dims=3, | |
| n_input_channels=1, | |
| num_classes=num_classes, | |
| bias_downsample=bias_downsample, | |
| shortcut_type=shortcut_type, | |
| norm=_norm | |
| ) | |
| return | |
| def forward(self, x: torch.Tensor) -> torch.Tensor: | |
| return self.net(x) |