Skip to content

Commit

Permalink
Bump segmentation-models-pytorch from 0.3.4 to 0.4.0 in /requirements (
Browse files Browse the repository at this point in the history
…#2506)

* Bump segmentation-models-pytorch from 0.3.4 to 0.4.0 in /requirements

Bumps [segmentation-models-pytorch](https://github.com/qubvel-org/segmentation_models.pytorch) from 0.3.4 to 0.4.0.
- [Release notes](https://github.com/qubvel-org/segmentation_models.pytorch/releases)
- [Commits](qubvel-org/segmentation_models.pytorch@v0.3.4...v0.4.0)

---
updated-dependencies:
- dependency-name: segmentation-models-pytorch
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>

* unpin timm

* timm.create_model is not explicitly exported (yet)

* Fix minor bugs in Scale-MAE

* Ignore incorrect type

* timm 1.0.13 now out

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Adam J. Stewart <[email protected]>
  • Loading branch information
dependabot[bot] and adamjstewart authored Jan 20, 2025
1 parent d386fe3 commit c5bdb79
Show file tree
Hide file tree
Showing 21 changed files with 35 additions and 33 deletions.
2 changes: 0 additions & 2 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,6 @@ updates:
# https://github.com/pytorch/pytorch_sphinx_theme/issues/175
- dependency-name: 'sphinx'
versions: '>=6'
# segmentation-models-pytorch pins timm, must update in unison
- dependency-name: 'timm'
- package-ecosystem: 'npm'
directory: '/'
schedule:
Expand Down
2 changes: 1 addition & 1 deletion experiments/ssl4eo/flops.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
for model in models:
print(f'Model: {model}')

m = timm.create_model(model, num_classes=num_classes, in_chans=in_channels)
m = timm.create_model(model, num_classes=num_classes, in_chans=in_channels) # type: ignore[attr-defined]

# Calculate memory requirements of model
mem_params = sum([p.nelement() * p.element_size() for p in m.parameters()])
Expand Down
4 changes: 2 additions & 2 deletions requirements/required.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ pillow==11.1.0
pyproj==3.7.0
rasterio==1.4.3
rtree==1.3.0
segmentation-models-pytorch==0.3.4
segmentation-models-pytorch==0.4.0
shapely==2.0.6
timm==0.9.7
timm==1.0.13
torch==2.5.1
torchmetrics==1.6.1
torchvision==0.20.1
6 changes: 3 additions & 3 deletions tests/models/test_resnet.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ def mocked_weights(
load_state_dict_from_url: None,
) -> WeightsEnum:
path = tmp_path / f'{weights}.pth'
model = timm.create_model('resnet18', in_chans=weights.meta['in_chans'])
model = timm.create_model('resnet18', in_chans=weights.meta['in_chans']) # type: ignore[attr-defined]
torch.save(model.state_dict(), path)
try:
monkeypatch.setattr(weights.value, 'url', str(path))
Expand Down Expand Up @@ -78,7 +78,7 @@ def mocked_weights(
load_state_dict_from_url: None,
) -> WeightsEnum:
path = tmp_path / f'{weights}.pth'
model = timm.create_model('resnet50', in_chans=weights.meta['in_chans'])
model = timm.create_model('resnet50', in_chans=weights.meta['in_chans']) # type: ignore[attr-defined]
torch.save(model.state_dict(), path)
try:
monkeypatch.setattr(weights.value, 'url', str(path))
Expand Down Expand Up @@ -122,7 +122,7 @@ def mocked_weights(
load_state_dict_from_url: None,
) -> WeightsEnum:
path = tmp_path / f'{weights}.pth'
model = timm.create_model('resnet152', in_chans=weights.meta['in_chans'])
model = timm.create_model('resnet152', in_chans=weights.meta['in_chans']) # type: ignore[attr-defined]
torch.save(model.state_dict(), path)
try:
monkeypatch.setattr(weights.value, 'url', str(path))
Expand Down
2 changes: 1 addition & 1 deletion tests/models/test_vit.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ def mocked_weights(
load_state_dict_from_url: None,
) -> WeightsEnum:
path = tmp_path / f'{weights}.pth'
model = timm.create_model(
model = timm.create_model( # type: ignore[attr-defined]
weights.meta['model'], in_chans=weights.meta['in_chans']
)
torch.save(model.state_dict(), path)
Expand Down
2 changes: 1 addition & 1 deletion tests/trainers/test_byol.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ def mocked_weights(
load_state_dict_from_url: None,
) -> WeightsEnum:
path = tmp_path / f'{weights}.pth'
model = timm.create_model(
model = timm.create_model( # type: ignore[attr-defined]
weights.meta['model'], in_chans=weights.meta['in_chans']
)
torch.save(model.state_dict(), path)
Expand Down
2 changes: 1 addition & 1 deletion tests/trainers/test_classification.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ def mocked_weights(
load_state_dict_from_url: None,
) -> WeightsEnum:
path = tmp_path / f'{weights}.pth'
model = timm.create_model(
model = timm.create_model( # type: ignore[attr-defined]
weights.meta['model'], in_chans=weights.meta['in_chans']
)
torch.save(model.state_dict(), path)
Expand Down
2 changes: 1 addition & 1 deletion tests/trainers/test_moco.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ def mocked_weights(
load_state_dict_from_url: None,
) -> WeightsEnum:
path = tmp_path / f'{weights}.pth'
model = timm.create_model(
model = timm.create_model( # type: ignore[attr-defined]
weights.meta['model'], in_chans=weights.meta['in_chans']
)
torch.save(model.state_dict(), path)
Expand Down
4 changes: 2 additions & 2 deletions tests/trainers/test_regression.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ def mocked_weights(
load_state_dict_from_url: None,
) -> WeightsEnum:
path = tmp_path / f'{weights}.pth'
model = timm.create_model(
model = timm.create_model( # type: ignore[attr-defined]
weights.meta['model'], in_chans=weights.meta['in_chans']
)
torch.save(model.state_dict(), path)
Expand Down Expand Up @@ -273,7 +273,7 @@ def mocked_weights(
load_state_dict_from_url: None,
) -> WeightsEnum:
path = tmp_path / f'{weights}.pth'
model = timm.create_model(
model = timm.create_model( # type: ignore[attr-defined]
weights.meta['model'], in_chans=weights.meta['in_chans']
)
torch.save(model.state_dict(), path)
Expand Down
2 changes: 1 addition & 1 deletion tests/trainers/test_segmentation.py
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ def mocked_weights(
load_state_dict_from_url: None,
) -> WeightsEnum:
path = tmp_path / f'{weights}.pth'
model = timm.create_model(
model = timm.create_model( # type: ignore[attr-defined]
weights.meta['model'], in_chans=weights.meta['in_chans']
)
torch.save(model.state_dict(), path)
Expand Down
2 changes: 1 addition & 1 deletion tests/trainers/test_simclr.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ def mocked_weights(
load_state_dict_from_url: None,
) -> WeightsEnum:
path = tmp_path / f'{weights}.pth'
model = timm.create_model(
model = timm.create_model( # type: ignore[attr-defined]
weights.meta['model'], in_chans=weights.meta['in_chans']
)
torch.save(model.state_dict(), path)
Expand Down
2 changes: 1 addition & 1 deletion tests/trainers/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ def test_extract_backbone_unsupported_model(tmp_path: Path) -> None:


def test_get_input_layer_name_and_module() -> None:
key, module = _get_input_layer_name_and_module(timm.create_model('resnet18'))
key, module = _get_input_layer_name_and_module(timm.create_model('resnet18')) # type: ignore[attr-defined]
assert key == 'conv1'
assert isinstance(module, nn.Conv2d)
assert module.in_channels == 3
Expand Down
2 changes: 1 addition & 1 deletion torchgeo/models/dofa.py
Original file line number Diff line number Diff line change
Expand Up @@ -311,7 +311,7 @@ def __init__(
num_heads,
mlp_ratio,
qkv_bias=True,
norm_layer=norm_layer,
norm_layer=norm_layer, # type: ignore[arg-type]
)
for i in range(depth)
]
Expand Down
6 changes: 3 additions & 3 deletions torchgeo/models/resnet.py
Original file line number Diff line number Diff line change
Expand Up @@ -768,7 +768,7 @@ def resnet18(
if weights:
kwargs['in_chans'] = weights.meta['in_chans']

model: ResNet = timm.create_model('resnet18', *args, **kwargs)
model: ResNet = timm.create_model('resnet18', *args, **kwargs) # type: ignore[attr-defined]

if weights:
missing_keys, unexpected_keys = model.load_state_dict(
Expand Down Expand Up @@ -803,7 +803,7 @@ def resnet50(
if weights:
kwargs['in_chans'] = weights.meta['in_chans']

model: ResNet = timm.create_model('resnet50', *args, **kwargs)
model: ResNet = timm.create_model('resnet50', *args, **kwargs) # type: ignore[attr-defined]

if weights:
missing_keys, unexpected_keys = model.load_state_dict(
Expand Down Expand Up @@ -837,7 +837,7 @@ def resnet152(
if weights:
kwargs['in_chans'] = weights.meta['in_chans']

model: ResNet = timm.create_model('resnet152', *args, **kwargs)
model: ResNet = timm.create_model('resnet152', *args, **kwargs) # type: ignore[attr-defined]

if weights:
missing_keys, unexpected_keys = model.load_state_dict(
Expand Down
14 changes: 9 additions & 5 deletions torchgeo/models/scale_mae.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ def get_1d_sincos_pos_embed_from_grid_torch(embed_dim: int, pos: Tensor) -> Tens
return emb


class ScaleMAE(VisionTransformer): # type: ignore[misc]
class ScaleMAE(VisionTransformer):
"""Custom Vision Transformer for Scale-MAE with GSD positional embeddings.
This is a ViT encoder only model of the Scale-MAE architecture with GSD positional embeddings.
Expand All @@ -117,7 +117,8 @@ def __init__(self, res: float = 1.0, *args: Any, **kwargs: Any) -> None:
self.res = res

# Scale MAE uses resolution specific positional embeddings
self.pos_embed.requires_grad = False
if self.pos_embed is not None:
self.pos_embed.requires_grad = False

def _pos_embed(self, x: Tensor) -> Tensor:
"""Apply GSD positional embeddings to the input tensor."""
Expand All @@ -133,8 +134,9 @@ def _pos_embed(self, x: Tensor) -> Tensor:
.to(x.dtype)
.to(x.device)
)
cls_tokens = self.cls_token.expand(x.shape[0], -1, -1)
x = torch.cat((cls_tokens, x), dim=1)
if self.cls_token is not None:
cls_tokens = self.cls_token.expand(x.shape[0], -1, -1)
x = torch.cat((cls_tokens, x), dim=1)
x = x + pos_embed
x = self.pos_drop(x)
return x
Expand All @@ -155,7 +157,9 @@ def interpolate_pos_embed(
pos_embed_checkpoint = state_dict['pos_embed']
embedding_size = pos_embed_checkpoint.shape[-1]
num_patches = model.patch_embed.num_patches
num_extra_tokens = model.pos_embed.shape[-2] - num_patches
num_extra_tokens = 0
if model.pos_embed is not None:
num_extra_tokens = model.pos_embed.shape[-2] - num_patches
# height (== width) for the checkpoint position embedding
orig_size = int((pos_embed_checkpoint.shape[-2] - num_extra_tokens) ** 0.5)
# height (== width) for the new position embedding
Expand Down
2 changes: 1 addition & 1 deletion torchgeo/models/vit.py
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@ def vit_small_patch16_224(
if weights:
kwargs['in_chans'] = weights.meta['in_chans']

model: VisionTransformer = timm.create_model(
model: VisionTransformer = timm.create_model( # type: ignore[attr-defined]
'vit_small_patch16_224', *args, **kwargs
)

Expand Down
2 changes: 1 addition & 1 deletion torchgeo/trainers/byol.py
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,7 @@ def configure_models(self) -> None:
in_channels: int = self.hparams['in_channels']

# Create backbone
backbone = timm.create_model(
backbone = timm.create_model( # type: ignore[attr-defined]
self.hparams['model'], in_chans=in_channels, pretrained=weights is True
)

Expand Down
2 changes: 1 addition & 1 deletion torchgeo/trainers/classification.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ def configure_models(self) -> None:
weights = self.weights

# Create model
self.model = timm.create_model(
self.model = timm.create_model( # type: ignore[attr-defined]
self.hparams['model'],
num_classes=self.hparams['num_classes'],
in_chans=self.hparams['in_channels'],
Expand Down
4 changes: 2 additions & 2 deletions torchgeo/trainers/moco.py
Original file line number Diff line number Diff line change
Expand Up @@ -238,10 +238,10 @@ def configure_models(self) -> None:
output_dim: int = self.hparams['output_dim']

# Create backbone
self.backbone = timm.create_model(
self.backbone = timm.create_model( # type: ignore[attr-defined]
model, in_chans=in_channels, num_classes=0, pretrained=weights is True
)
self.backbone_momentum = timm.create_model(
self.backbone_momentum = timm.create_model( # type: ignore[attr-defined]
model, in_chans=in_channels, num_classes=0, pretrained=weights is True
)
deactivate_requires_grad(self.backbone_momentum)
Expand Down
2 changes: 1 addition & 1 deletion torchgeo/trainers/regression.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ def configure_models(self) -> None:
"""Initialize the model."""
# Create model
weights = self.weights
self.model = timm.create_model(
self.model = timm.create_model( # type: ignore[attr-defined]
self.hparams['model'],
num_classes=self.hparams['num_outputs'],
in_chans=self.hparams['in_channels'],
Expand Down
2 changes: 1 addition & 1 deletion torchgeo/trainers/simclr.py
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ def configure_models(self) -> None:
weights = self.weights

# Create backbone
self.backbone = timm.create_model(
self.backbone = timm.create_model( # type: ignore[attr-defined]
self.hparams['model'],
in_chans=self.hparams['in_channels'],
num_classes=0,
Expand Down

0 comments on commit c5bdb79

Please sign in to comment.