From 408a2ef89998337f67b48bf95a4fe21571d1691c Mon Sep 17 00:00:00 2001 From: Nils Lehmann Date: Sun, 27 Nov 2022 19:46:32 +0100 Subject: [PATCH 1/5] name change semgmentation model --- conf/chesapeake_cvpr.yaml | 4 +- conf/etci2021.yaml | 4 +- conf/inria.yaml | 4 +- conf/landcoverai.yaml | 4 +- conf/naipchesapeake.yaml | 4 +- conf/oscd.yaml | 4 +- conf/sen12ms.yaml | 4 +- evaluate.py | 8 ++-- .../run_chesapeake_cvpr_experiments.py | 2 +- .../run_landcoverai_seed_experiments.py | 2 +- tests/conf/chesapeake_cvpr_5.yaml | 4 +- tests/conf/chesapeake_cvpr_7.yaml | 2 +- tests/conf/chesapeake_cvpr_prior.yaml | 2 +- tests/conf/deepglobelandcover_0.yaml | 4 +- tests/conf/deepglobelandcover_5.yaml | 4 +- tests/conf/etci2021.yaml | 4 +- tests/conf/inria.yaml | 4 +- tests/conf/landcoverai.yaml | 4 +- tests/conf/naipchesapeake.yaml | 4 +- tests/conf/oscd_all.yaml | 4 +- tests/conf/oscd_rgb.yaml | 4 +- tests/conf/sen12ms_all.yaml | 4 +- tests/conf/sen12ms_s1.yaml | 4 +- tests/conf/sen12ms_s2_all.yaml | 4 +- tests/conf/sen12ms_s2_reduced.yaml | 4 +- tests/trainers/test_segmentation.py | 21 +++++++--- torchgeo/trainers/segmentation.py | 39 +++++++++++++------ 27 files changed, 92 insertions(+), 64 deletions(-) diff --git a/conf/chesapeake_cvpr.yaml b/conf/chesapeake_cvpr.yaml index 40c7412b028..997f2ffc819 100644 --- a/conf/chesapeake_cvpr.yaml +++ b/conf/chesapeake_cvpr.yaml @@ -8,8 +8,8 @@ experiment: name: "chesapeake_cvpr_example" module: loss: "ce" - segmentation_model: "unet" - encoder_name: "resnet18" + model: "unet" + encoder: "resnet18" encoder_weights: null encoder_output_stride: 16 learning_rate: 1e-3 diff --git a/conf/etci2021.yaml b/conf/etci2021.yaml index a8e8a319f8a..fb490209562 100644 --- a/conf/etci2021.yaml +++ b/conf/etci2021.yaml @@ -2,8 +2,8 @@ experiment: task: "etci2021" module: loss: "ce" - segmentation_model: "unet" - encoder_name: "resnet18" + model: "unet" + encoder: "resnet18" encoder_weights: "imagenet" learning_rate: 1e-3 learning_rate_schedule_patience: 6 diff --git a/conf/inria.yaml b/conf/inria.yaml index dacc83dbeca..6e58671c7d8 100644 --- a/conf/inria.yaml +++ b/conf/inria.yaml @@ -14,8 +14,8 @@ experiment: name: "inria_test" module: loss: "ce" - segmentation_model: "unet" - encoder_name: "resnet18" + model: "unet" + encoder: "resnet18" encoder_weights: "imagenet" learning_rate: 1e-3 learning_rate_schedule_patience: 6 diff --git a/conf/landcoverai.yaml b/conf/landcoverai.yaml index 4bb37e73973..8872cb7522b 100644 --- a/conf/landcoverai.yaml +++ b/conf/landcoverai.yaml @@ -7,8 +7,8 @@ experiment: task: "landcoverai" module: loss: "ce" - segmentation_model: "unet" - encoder_name: "resnet18" + model: "unet" + encoder: "resnet18" encoder_weights: "imagenet" learning_rate: 1e-3 learning_rate_schedule_patience: 6 diff --git a/conf/naipchesapeake.yaml b/conf/naipchesapeake.yaml index 99ba7e8ecb0..ecb42cd32d7 100644 --- a/conf/naipchesapeake.yaml +++ b/conf/naipchesapeake.yaml @@ -7,8 +7,8 @@ experiment: task: "naipchesapeake" module: loss: "ce" - segmentation_model: "deeplabv3+" - encoder_name: "resnet34" + model: "deeplabv3+" + encoder: "resnet34" encoder_weights: "imagenet" encoder_output_stride: 16 learning_rate: 1e-3 diff --git a/conf/oscd.yaml b/conf/oscd.yaml index 4a516fb9f3b..a9dad4255d5 100644 --- a/conf/oscd.yaml +++ b/conf/oscd.yaml @@ -7,8 +7,8 @@ experiment: task: "oscd" module: loss: "jaccard" - segmentation_model: "unet" - encoder_name: "resnet18" + model: "unet" + encoder: "resnet18" encoder_weights: null learning_rate: 1e-3 learning_rate_schedule_patience: 6 diff --git a/conf/sen12ms.yaml b/conf/sen12ms.yaml index 02954dd8e71..b916eea1508 100644 --- a/conf/sen12ms.yaml +++ b/conf/sen12ms.yaml @@ -7,8 +7,8 @@ experiment: task: "sen12ms" module: loss: "ce" - segmentation_model: "unet" - encoder_name: "resnet18" + model: "unet" + encoder: "resnet18" encoder_weights: null encoder_output_stride: 16 learning_rate: 1e-3 diff --git a/evaluate.py b/evaluate.py index 01358052c9d..1177c9ba412 100755 --- a/evaluate.py +++ b/evaluate.py @@ -177,8 +177,8 @@ def main(args: argparse.Namespace) -> None: elif issubclass(TASK, SemanticSegmentationTask): val_row = { "split": "val", - "segmentation_model": model.hparams["segmentation_model"], - "encoder_name": model.hparams["encoder_name"], + "model": model.hparams["model"], + "encoder": model.hparams["encoder"], "encoder_weights": model.hparams["encoder_weights"], "learning_rate": model.hparams["learning_rate"], "loss": model.hparams["loss"], @@ -186,8 +186,8 @@ def main(args: argparse.Namespace) -> None: test_row = { "split": "test", - "segmentation_model": model.hparams["segmentation_model"], - "encoder_name": model.hparams["encoder_name"], + "model": model.hparams["model"], + "encoder": model.hparams["encoder"], "encoder_weights": model.hparams["encoder_weights"], "learning_rate": model.hparams["learning_rate"], "loss": model.hparams["loss"], diff --git a/experiments/run_chesapeake_cvpr_experiments.py b/experiments/run_chesapeake_cvpr_experiments.py index 37c1366bce0..3b2bdfa5402 100755 --- a/experiments/run_chesapeake_cvpr_experiments.py +++ b/experiments/run_chesapeake_cvpr_experiments.py @@ -57,7 +57,7 @@ def do_work(work: "Queue[str]", gpu_idx: int) -> bool: "python train.py" + f" config_file={config_file}" + f" experiment.name={experiment_name}" - + f" experiment.module.segmentation_model={model}" + + f" experiment.module.model={model}" + f" experiment.module.encoder_name={encoder}" + f" experiment.module.encoder_weights={weight_init}" + f" experiment.module.learning_rate={lr}" diff --git a/experiments/run_landcoverai_seed_experiments.py b/experiments/run_landcoverai_seed_experiments.py index b5321970382..e38026530d6 100755 --- a/experiments/run_landcoverai_seed_experiments.py +++ b/experiments/run_landcoverai_seed_experiments.py @@ -51,7 +51,7 @@ def do_work(work: "Queue[str]", gpu_idx: int) -> bool: "python train.py" + f" config_file={config_file}" + f" experiment.name={experiment_name}" - + f" experiment.module.segmentation_model={model}" + + f" experiment.module.model={model}" + f" experiment.module.learning_rate={lr}" + f" experiment.module.loss={loss}" + f" experiment.module.encoder_name={encoder}" diff --git a/tests/conf/chesapeake_cvpr_5.yaml b/tests/conf/chesapeake_cvpr_5.yaml index 1e3fb6ab9e9..9d207812d1e 100644 --- a/tests/conf/chesapeake_cvpr_5.yaml +++ b/tests/conf/chesapeake_cvpr_5.yaml @@ -2,8 +2,8 @@ experiment: task: "chesapeake_cvpr" module: loss: "ce" - segmentation_model: "unet" - encoder_name: "resnet50" + model: "unet" + encoder: "resnet50" encoder_weights: null encoder_output_stride: 16 learning_rate: 1e-3 diff --git a/tests/conf/chesapeake_cvpr_7.yaml b/tests/conf/chesapeake_cvpr_7.yaml index a9ef7166ef7..88a032fa294 100644 --- a/tests/conf/chesapeake_cvpr_7.yaml +++ b/tests/conf/chesapeake_cvpr_7.yaml @@ -2,7 +2,7 @@ experiment: task: "chesapeake_cvpr" module: loss: "ce" - segmentation_model: "unet" + model: "unet" encoder_name: "resnet18" encoder_weights: null encoder_output_stride: 16 diff --git a/tests/conf/chesapeake_cvpr_prior.yaml b/tests/conf/chesapeake_cvpr_prior.yaml index 890ed9365e5..d8d85bc0d89 100644 --- a/tests/conf/chesapeake_cvpr_prior.yaml +++ b/tests/conf/chesapeake_cvpr_prior.yaml @@ -2,7 +2,7 @@ experiment: task: "chesapeake_cvpr" module: loss: "ce" - segmentation_model: "unet" + model: "unet" encoder_name: "resnet50" encoder_weights: null encoder_output_stride: 16 diff --git a/tests/conf/deepglobelandcover_0.yaml b/tests/conf/deepglobelandcover_0.yaml index 3867e1cc13b..01cf06d8c77 100644 --- a/tests/conf/deepglobelandcover_0.yaml +++ b/tests/conf/deepglobelandcover_0.yaml @@ -2,8 +2,8 @@ experiment: task: "deepglobelandcover" module: loss: "ce" - segmentation_model: "unet" - encoder_name: "resnet18" + model: "unet" + encoder: "resnet18" encoder_weights: null learning_rate: 1e-3 learning_rate_schedule_patience: 6 diff --git a/tests/conf/deepglobelandcover_5.yaml b/tests/conf/deepglobelandcover_5.yaml index 74fa1a0542b..dd7d26da0c2 100644 --- a/tests/conf/deepglobelandcover_5.yaml +++ b/tests/conf/deepglobelandcover_5.yaml @@ -2,8 +2,8 @@ experiment: task: "deepglobelandcover" module: loss: "ce" - segmentation_model: "unet" - encoder_name: "resnet18" + model: "unet" + encoder: "resnet18" encoder_weights: null learning_rate: 1e-3 learning_rate_schedule_patience: 6 diff --git a/tests/conf/etci2021.yaml b/tests/conf/etci2021.yaml index 364d6b16232..17111f582f5 100644 --- a/tests/conf/etci2021.yaml +++ b/tests/conf/etci2021.yaml @@ -2,8 +2,8 @@ experiment: task: "etci2021" module: loss: "ce" - segmentation_model: "unet" - encoder_name: "resnet18" + model: "unet" + encoder: "resnet18" encoder_weights: null learning_rate: 1e-3 learning_rate_schedule_patience: 6 diff --git a/tests/conf/inria.yaml b/tests/conf/inria.yaml index dc9e7994e02..19f362914ee 100644 --- a/tests/conf/inria.yaml +++ b/tests/conf/inria.yaml @@ -2,8 +2,8 @@ experiment: task: "inria" module: loss: "ce" - segmentation_model: "unet" - encoder_name: "resnet18" + model: "unet" + encoder: "resnet18" encoder_weights: "imagenet" learning_rate: 1e-3 learning_rate_schedule_patience: 6 diff --git a/tests/conf/landcoverai.yaml b/tests/conf/landcoverai.yaml index 357e573f39d..0f65fe33f65 100644 --- a/tests/conf/landcoverai.yaml +++ b/tests/conf/landcoverai.yaml @@ -2,8 +2,8 @@ experiment: task: "landcoverai" module: loss: "ce" - segmentation_model: "unet" - encoder_name: "resnet18" + model: "unet" + encoder: "resnet18" encoder_weights: null learning_rate: 1e-3 learning_rate_schedule_patience: 6 diff --git a/tests/conf/naipchesapeake.yaml b/tests/conf/naipchesapeake.yaml index 8ba07cbee13..a29d462da57 100644 --- a/tests/conf/naipchesapeake.yaml +++ b/tests/conf/naipchesapeake.yaml @@ -2,8 +2,8 @@ experiment: task: "naipchesapeake" module: loss: "ce" - segmentation_model: "deeplabv3+" - encoder_name: "resnet34" + model: "deeplabv3+" + encoder: "resnet34" encoder_weights: null encoder_output_stride: 16 learning_rate: 1e-3 diff --git a/tests/conf/oscd_all.yaml b/tests/conf/oscd_all.yaml index 24a9a032e73..fb7e2c6fbbf 100644 --- a/tests/conf/oscd_all.yaml +++ b/tests/conf/oscd_all.yaml @@ -2,8 +2,8 @@ experiment: task: "oscd" module: loss: "jaccard" - segmentation_model: "unet" - encoder_name: "resnet18" + model: "unet" + encoder: "resnet18" encoder_weights: null learning_rate: 1e-3 learning_rate_schedule_patience: 6 diff --git a/tests/conf/oscd_rgb.yaml b/tests/conf/oscd_rgb.yaml index 735b3dbba99..0a9ab166d7b 100644 --- a/tests/conf/oscd_rgb.yaml +++ b/tests/conf/oscd_rgb.yaml @@ -2,8 +2,8 @@ experiment: task: "oscd" module: loss: "jaccard" - segmentation_model: "unet" - encoder_name: "resnet18" + model: "unet" + encoder: "resnet18" encoder_weights: null learning_rate: 1e-3 learning_rate_schedule_patience: 6 diff --git a/tests/conf/sen12ms_all.yaml b/tests/conf/sen12ms_all.yaml index 0a6b3b7ceea..e7f2def9fe6 100644 --- a/tests/conf/sen12ms_all.yaml +++ b/tests/conf/sen12ms_all.yaml @@ -2,8 +2,8 @@ experiment: task: "sen12ms" module: loss: "ce" - segmentation_model: "unet" - encoder_name: "resnet18" + model: "unet" + encoder: "resnet18" encoder_weights: null encoder_output_stride: 16 learning_rate: 1e-3 diff --git a/tests/conf/sen12ms_s1.yaml b/tests/conf/sen12ms_s1.yaml index 0b74bcaa1de..16752798951 100644 --- a/tests/conf/sen12ms_s1.yaml +++ b/tests/conf/sen12ms_s1.yaml @@ -2,9 +2,9 @@ experiment: task: "sen12ms" module: loss: "focal" - segmentation_model: "fcn" + model: "fcn" num_filters: 1 - encoder_name: "resnet18" + encoder: "resnet18" encoder_weights: null encoder_output_stride: 16 learning_rate: 1e-3 diff --git a/tests/conf/sen12ms_s2_all.yaml b/tests/conf/sen12ms_s2_all.yaml index b46b1e6c92d..b8b5eb0f7fc 100644 --- a/tests/conf/sen12ms_s2_all.yaml +++ b/tests/conf/sen12ms_s2_all.yaml @@ -2,8 +2,8 @@ experiment: task: "sen12ms" module: loss: "ce" - segmentation_model: "unet" - encoder_name: "resnet18" + model: "unet" + encoder: "resnet18" encoder_weights: null encoder_output_stride: 16 learning_rate: 1e-3 diff --git a/tests/conf/sen12ms_s2_reduced.yaml b/tests/conf/sen12ms_s2_reduced.yaml index 647beadd945..39d08384ede 100644 --- a/tests/conf/sen12ms_s2_reduced.yaml +++ b/tests/conf/sen12ms_s2_reduced.yaml @@ -2,8 +2,8 @@ experiment: task: "sen12ms" module: loss: "ce" - segmentation_model: "unet" - encoder_name: "resnet18" + model: "unet" + encoder: "resnet18" encoder_weights: null encoder_output_stride: 16 learning_rate: 1e-3 diff --git a/tests/trainers/test_segmentation.py b/tests/trainers/test_segmentation.py index 7742a6cb5f6..f44610431f4 100644 --- a/tests/trainers/test_segmentation.py +++ b/tests/trainers/test_segmentation.py @@ -101,17 +101,17 @@ def test_no_logger(self) -> None: @pytest.fixture def model_kwargs(self) -> Dict[Any, Any]: return { - "segmentation_model": "unet", - "encoder_name": "resnet18", + "model": "unet", + "encoder": "resnet18", "encoder_weights": None, - "in_channels": 1, - "num_classes": 2, + "in_channels": 3, + "num_classes": 6, "loss": "ce", "ignore_index": 0, } def test_invalid_model(self, model_kwargs: Dict[Any, Any]) -> None: - model_kwargs["segmentation_model"] = "invalid_model" + model_kwargs["model"] = "invalid_model" match = "Model type 'invalid_model' is not valid." with pytest.raises(ValueError, match=match): SemanticSegmentationTask(**model_kwargs) @@ -134,3 +134,14 @@ def test_ignoreindex_with_jaccard(self, model_kwargs: Dict[Any, Any]) -> None: match = "ignore_index has no effect on training when loss='jaccard'" with pytest.warns(UserWarning, match=match): SemanticSegmentationTask(**model_kwargs) + + def test_missing_attributes( + self, model_kwargs: Dict[Any, Any], monkeypatch: MonkeyPatch + ) -> None: + monkeypatch.delattr(LandCoverAIDataModule, "plot") + datamodule = LandCoverAIDataModule( + root="tests/data/landcoverai", batch_size=1, num_workers=0 + ) + model = SemanticSegmentationTask(**model_kwargs) + trainer = Trainer(fast_dev_run=True, log_every_n_steps=1, max_epochs=1) + trainer.validate(model=model, datamodule=datamodule) diff --git a/torchgeo/trainers/segmentation.py b/torchgeo/trainers/segmentation.py index 754eca560ed..4d69b66d1b8 100644 --- a/torchgeo/trainers/segmentation.py +++ b/torchgeo/trainers/segmentation.py @@ -29,25 +29,31 @@ class SemanticSegmentationTask(pl.LightningModule): - """LightningModule for semantic segmentation of images.""" + """LightningModule for semantic segmentation of images. + + Supports `Segmentation Models Pytorch + `_ + as an architecture choice in combination with any of these + `TIMM encoders `_. + """ def config_task(self) -> None: """Configures the task based on kwargs parameters passed to the constructor.""" - if self.hyperparams["segmentation_model"] == "unet": + if self.hyperparams["model"] == "unet": self.model = smp.Unet( - encoder_name=self.hyperparams["encoder_name"], + encoder_name=self.hyperparams["encoder"], encoder_weights=self.hyperparams["encoder_weights"], in_channels=self.hyperparams["in_channels"], classes=self.hyperparams["num_classes"], ) - elif self.hyperparams["segmentation_model"] == "deeplabv3+": + elif self.hyperparams["model"] == "deeplabv3+": self.model = smp.DeepLabV3Plus( - encoder_name=self.hyperparams["encoder_name"], + encoder_name=self.hyperparams["encoder"], encoder_weights=self.hyperparams["encoder_weights"], in_channels=self.hyperparams["in_channels"], classes=self.hyperparams["num_classes"], ) - elif self.hyperparams["segmentation_model"] == "fcn": + elif self.hyperparams["model"] == "fcn": self.model = FCN( in_channels=self.hyperparams["in_channels"], classes=self.hyperparams["num_classes"], @@ -55,7 +61,8 @@ def config_task(self) -> None: ) else: raise ValueError( - f"Model type '{self.hyperparams['segmentation_model']}' is not valid." + f"Model type '{self.hyperparams['model']}' is not valid. " + f"Currently, only supports 'unet', 'deeplabv3+' and 'fcn'." ) if self.hyperparams["loss"] == "ce": @@ -70,26 +77,36 @@ def config_task(self) -> None: "multiclass", ignore_index=self.ignore_index, normalized=True ) else: - raise ValueError(f"Loss type '{self.hyperparams['loss']}' is not valid.") + raise ValueError( + f"Loss type '{self.hyperparams['loss']}' is not valid. " + f"Currently, supports 'ce', 'jaccard' or 'focal' loss." + ) def __init__(self, **kwargs: Any) -> None: """Initialize the LightningModule with a model and loss function. Keyword Args: - segmentation_model: Name of the segmentation model type to use - encoder_name: Name of the encoder model backbone to use + model: Name of the segmentation model type to use + encoder: Name of the encoder backbone to use encoder_weights: None or "imagenet" to use imagenet pretrained weights in the encoder model in_channels: Number of channels in input image num_classes: Number of semantic classes to predict - loss: Name of the loss function + loss: Name of the loss function, currently supports + 'ce', 'jaccard' or 'focal' loss ignore_index: Optional integer class index to ignore in the loss and metrics + learning_rate: Learning rate for optimizer + learning_rate_schedule_patience: Patience for learning rate scheduler Raises: ValueError: if kwargs arguments are invalid .. versionchanged:: 0.3 The *ignore_zeros* parameter was renamed to *ignore_index*. + + .. versionchanged:: 0.4 + The *segmentation_model* parameter was renamed to *model* and + *encoder_name* renamed to *encoder*. """ super().__init__() From f80671087bccabb171155c4040c9200bb4e45dd2 Mon Sep 17 00:00:00 2001 From: Nils Lehmann Date: Sun, 27 Nov 2022 20:36:00 +0100 Subject: [PATCH 2/5] chmod evaluate.py --- evaluate.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 evaluate.py diff --git a/evaluate.py b/evaluate.py old mode 100644 new mode 100755 From f1322082b2dd3801dba0828ef0a1042d7881350b Mon Sep 17 00:00:00 2001 From: Nils Lehmann Date: Mon, 5 Dec 2022 09:30:22 +0100 Subject: [PATCH 3/5] fix variable name evaluate --- evaluate.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/evaluate.py b/evaluate.py index 58d959246d8..a72e5cef3b6 100755 --- a/evaluate.py +++ b/evaluate.py @@ -180,8 +180,8 @@ def main(args: argparse.Namespace) -> None: val_row = { "split": "val", "model": hparams["model"], - "encoder_name": hparams["encoder_name"], - "encoder_weights": hparams["encoder_weights"], + "encoder": hparams["encoder"], + "weights": hparams["weights"], "learning_rate": hparams["learning_rate"], "loss": hparams["loss"], } @@ -189,8 +189,8 @@ def main(args: argparse.Namespace) -> None: test_row = { "split": "test", "model": hparams["model"], - "encoder_name": hparams["encoder_name"], - "encoder_weights": hparams["encoder_weights"], + "encoder": hparams["encoder"], + "weights": hparams["weights"], "learning_rate": hparams["learning_rate"], "loss": hparams["loss"], } From edcf41be3a2038c038a2667975f7e7f3de897006 Mon Sep 17 00:00:00 2001 From: Nils Lehmann Date: Tue, 6 Dec 2022 20:06:48 +0100 Subject: [PATCH 4/5] encoder -> backbone --- conf/chesapeake_cvpr.yaml | 6 +++--- conf/etci2021.yaml | 4 ++-- conf/inria.yaml | 4 ++-- conf/landcoverai.yaml | 4 ++-- conf/naipchesapeake.yaml | 6 +++--- conf/oscd.yaml | 4 ++-- conf/sen12ms.yaml | 6 +++--- evaluate.py | 4 ++-- .../run_chesapeake_cvpr_experiments.py | 12 +++++------ experiments/run_landcoverai_experiments.py | 12 +++++------ .../run_landcoverai_seed_experiments.py | 12 +++++------ tests/conf/chesapeake_cvpr_5.yaml | 6 +++--- tests/conf/deepglobelandcover_0.yaml | 4 ++-- tests/conf/deepglobelandcover_5.yaml | 4 ++-- tests/conf/etci2021.yaml | 4 ++-- tests/conf/inria.yaml | 4 ++-- tests/conf/landcoverai.yaml | 4 ++-- tests/conf/naipchesapeake.yaml | 6 +++--- tests/conf/oscd_all.yaml | 4 ++-- tests/conf/oscd_rgb.yaml | 4 ++-- tests/conf/sen12ms_all.yaml | 6 +++--- tests/conf/sen12ms_s1.yaml | 6 +++--- tests/conf/sen12ms_s2_all.yaml | 6 +++--- tests/conf/sen12ms_s2_reduced.yaml | 6 +++--- tests/trainers/test_segmentation.py | 4 ++-- torchgeo/trainers/segmentation.py | 21 ++++++++++--------- 26 files changed, 82 insertions(+), 81 deletions(-) diff --git a/conf/chesapeake_cvpr.yaml b/conf/chesapeake_cvpr.yaml index 997f2ffc819..5834351dec8 100644 --- a/conf/chesapeake_cvpr.yaml +++ b/conf/chesapeake_cvpr.yaml @@ -9,9 +9,9 @@ experiment: module: loss: "ce" model: "unet" - encoder: "resnet18" - encoder_weights: null - encoder_output_stride: 16 + backbone: "resnet18" + weights: null + backbone_output_stride: 16 learning_rate: 1e-3 learning_rate_schedule_patience: 6 in_channels: 4 diff --git a/conf/etci2021.yaml b/conf/etci2021.yaml index fb490209562..c6e02005d10 100644 --- a/conf/etci2021.yaml +++ b/conf/etci2021.yaml @@ -3,8 +3,8 @@ experiment: module: loss: "ce" model: "unet" - encoder: "resnet18" - encoder_weights: "imagenet" + backbone: "resnet18" + weights: "imagenet" learning_rate: 1e-3 learning_rate_schedule_patience: 6 in_channels: 6 diff --git a/conf/inria.yaml b/conf/inria.yaml index 6e58671c7d8..462c873fda6 100644 --- a/conf/inria.yaml +++ b/conf/inria.yaml @@ -15,8 +15,8 @@ experiment: module: loss: "ce" model: "unet" - encoder: "resnet18" - encoder_weights: "imagenet" + backbone: "resnet18" + weights: "imagenet" learning_rate: 1e-3 learning_rate_schedule_patience: 6 in_channels: 3 diff --git a/conf/landcoverai.yaml b/conf/landcoverai.yaml index 8872cb7522b..98648408028 100644 --- a/conf/landcoverai.yaml +++ b/conf/landcoverai.yaml @@ -8,8 +8,8 @@ experiment: module: loss: "ce" model: "unet" - encoder: "resnet18" - encoder_weights: "imagenet" + backbone: "resnet18" + weights: "imagenet" learning_rate: 1e-3 learning_rate_schedule_patience: 6 in_channels: 3 diff --git a/conf/naipchesapeake.yaml b/conf/naipchesapeake.yaml index ecb42cd32d7..6afd851671f 100644 --- a/conf/naipchesapeake.yaml +++ b/conf/naipchesapeake.yaml @@ -8,9 +8,9 @@ experiment: module: loss: "ce" model: "deeplabv3+" - encoder: "resnet34" - encoder_weights: "imagenet" - encoder_output_stride: 16 + backbone: "resnet34" + weights: "imagenet" + backbone_output_stride: 16 learning_rate: 1e-3 learning_rate_schedule_patience: 2 in_channels: 4 diff --git a/conf/oscd.yaml b/conf/oscd.yaml index a9dad4255d5..486dbb9b64b 100644 --- a/conf/oscd.yaml +++ b/conf/oscd.yaml @@ -8,8 +8,8 @@ experiment: module: loss: "jaccard" model: "unet" - encoder: "resnet18" - encoder_weights: null + backbone: "resnet18" + weights: null learning_rate: 1e-3 learning_rate_schedule_patience: 6 verbose: false diff --git a/conf/sen12ms.yaml b/conf/sen12ms.yaml index b916eea1508..8b334bddcaf 100644 --- a/conf/sen12ms.yaml +++ b/conf/sen12ms.yaml @@ -8,9 +8,9 @@ experiment: module: loss: "ce" model: "unet" - encoder: "resnet18" - encoder_weights: null - encoder_output_stride: 16 + backbone: "resnet18" + weights: null + backbone_output_stride: 16 learning_rate: 1e-3 learning_rate_schedule_patience: 2 in_channels: 15 diff --git a/evaluate.py b/evaluate.py index a72e5cef3b6..505bdfd805b 100755 --- a/evaluate.py +++ b/evaluate.py @@ -180,7 +180,7 @@ def main(args: argparse.Namespace) -> None: val_row = { "split": "val", "model": hparams["model"], - "encoder": hparams["encoder"], + "backbone": hparams["backbone"], "weights": hparams["weights"], "learning_rate": hparams["learning_rate"], "loss": hparams["loss"], @@ -189,7 +189,7 @@ def main(args: argparse.Namespace) -> None: test_row = { "split": "test", "model": hparams["model"], - "encoder": hparams["encoder"], + "backbone": hparams["backbone"], "weights": hparams["weights"], "learning_rate": hparams["learning_rate"], "loss": hparams["loss"], diff --git a/experiments/run_chesapeake_cvpr_experiments.py b/experiments/run_chesapeake_cvpr_experiments.py index 3b2bdfa5402..f1f002947c4 100755 --- a/experiments/run_chesapeake_cvpr_experiments.py +++ b/experiments/run_chesapeake_cvpr_experiments.py @@ -16,7 +16,7 @@ # Hyperparameter options training_set_options = ["de"] model_options = ["unet"] -encoder_options = ["resnet18", "resnet50"] +backbone_options = ["resnet18", "resnet50"] lr_options = [1e-2, 1e-3, 1e-4] loss_options = ["ce", "jaccard"] weight_init_options = ["null", "imagenet"] @@ -36,16 +36,16 @@ def do_work(work: "Queue[str]", gpu_idx: int) -> bool: if __name__ == "__main__": work: "Queue[str]" = Queue() - for (train_state, model, encoder, lr, loss, weight_init) in itertools.product( + for (train_state, model, backbone, lr, loss, weight_init) in itertools.product( training_set_options, model_options, - encoder_options, + backbone_options, lr_options, loss_options, weight_init_options, ): - experiment_name = f"{train_state}_{model}_{encoder}_{lr}_{loss}_{weight_init}" + experiment_name = f"{train_state}_{model}_{backbone}_{lr}_{loss}_{weight_init}" output_dir = os.path.join("output", "chesapeake-cvpr_experiments") log_dir = os.path.join(output_dir, "logs") @@ -58,8 +58,8 @@ def do_work(work: "Queue[str]", gpu_idx: int) -> bool: + f" config_file={config_file}" + f" experiment.name={experiment_name}" + f" experiment.module.model={model}" - + f" experiment.module.encoder_name={encoder}" - + f" experiment.module.encoder_weights={weight_init}" + + f" experiment.module.backbone={backbone}" + + f" experiment.module.weights={weight_init}" + f" experiment.module.learning_rate={lr}" + f" experiment.module.loss={loss}" + " experiment.module.class_set=7" diff --git a/experiments/run_landcoverai_experiments.py b/experiments/run_landcoverai_experiments.py index b5321970382..d64e22cb578 100755 --- a/experiments/run_landcoverai_experiments.py +++ b/experiments/run_landcoverai_experiments.py @@ -15,7 +15,7 @@ # Hyperparameter options model_options = ["unet"] -encoder_options = ["resnet18", "resnet50"] +backbone_options = ["resnet18", "resnet50"] lr_options = [1e-2, 1e-3, 1e-4] loss_options = ["ce", "jaccard"] weight_init_options = ["null", "imagenet"] @@ -35,11 +35,11 @@ def do_work(work: "Queue[str]", gpu_idx: int) -> bool: if __name__ == "__main__": work: "Queue[str]" = Queue() - for (model, encoder, lr, loss, weight_init) in itertools.product( - model_options, encoder_options, lr_options, loss_options, weight_init_options + for (model, backbone, lr, loss, weight_init) in itertools.product( + model_options, backbone_options, lr_options, loss_options, weight_init_options ): - experiment_name = f"{model}_{encoder}_{lr}_{loss}_{weight_init}" + experiment_name = f"{model}_{backbone}_{lr}_{loss}_{weight_init}" output_dir = os.path.join("output", "landcoverai_experiments") log_dir = os.path.join(output_dir, "logs") @@ -54,8 +54,8 @@ def do_work(work: "Queue[str]", gpu_idx: int) -> bool: + f" experiment.module.segmentation_model={model}" + f" experiment.module.learning_rate={lr}" + f" experiment.module.loss={loss}" - + f" experiment.module.encoder_name={encoder}" - + f" experiment.module.encoder_weights={weight_init}" + + f" experiment.module.backbone={backbone}" + + f" experiment.module.weights={weight_init}" + f" program.output_dir={output_dir}" + f" program.log_dir={log_dir}" + f" program.data_dir={DATA_DIR}" diff --git a/experiments/run_landcoverai_seed_experiments.py b/experiments/run_landcoverai_seed_experiments.py index e38026530d6..a63ee6efbf8 100755 --- a/experiments/run_landcoverai_seed_experiments.py +++ b/experiments/run_landcoverai_seed_experiments.py @@ -15,7 +15,7 @@ # Hyperparameter options model_options = ["unet"] -encoder_options = ["resnet18", "resnet50"] +backbone_options = ["resnet18", "resnet50"] lr_options = [1e-2, 1e-3, 1e-4] loss_options = ["ce", "jaccard"] weight_init_options = ["null", "imagenet"] @@ -35,11 +35,11 @@ def do_work(work: "Queue[str]", gpu_idx: int) -> bool: if __name__ == "__main__": work: "Queue[str]" = Queue() - for (model, encoder, lr, loss, weight_init) in itertools.product( - model_options, encoder_options, lr_options, loss_options, weight_init_options + for (model, backbone, lr, loss, weight_init) in itertools.product( + model_options, backbone_options, lr_options, loss_options, weight_init_options ): - experiment_name = f"{model}_{encoder}_{lr}_{loss}_{weight_init}" + experiment_name = f"{model}_{backbone}_{lr}_{loss}_{weight_init}" output_dir = os.path.join("output", "landcoverai_experiments") log_dir = os.path.join(output_dir, "logs") @@ -54,8 +54,8 @@ def do_work(work: "Queue[str]", gpu_idx: int) -> bool: + f" experiment.module.model={model}" + f" experiment.module.learning_rate={lr}" + f" experiment.module.loss={loss}" - + f" experiment.module.encoder_name={encoder}" - + f" experiment.module.encoder_weights={weight_init}" + + f" experiment.module.backbone={backbone}" + + f" experiment.module.weights={weight_init}" + f" program.output_dir={output_dir}" + f" program.log_dir={log_dir}" + f" program.data_dir={DATA_DIR}" diff --git a/tests/conf/chesapeake_cvpr_5.yaml b/tests/conf/chesapeake_cvpr_5.yaml index 9d207812d1e..beed2621aea 100644 --- a/tests/conf/chesapeake_cvpr_5.yaml +++ b/tests/conf/chesapeake_cvpr_5.yaml @@ -3,9 +3,9 @@ experiment: module: loss: "ce" model: "unet" - encoder: "resnet50" - encoder_weights: null - encoder_output_stride: 16 + backbone: "resnet50" + weights: null + backbone_output_stride: 16 learning_rate: 1e-3 learning_rate_schedule_patience: 6 in_channels: 4 diff --git a/tests/conf/deepglobelandcover_0.yaml b/tests/conf/deepglobelandcover_0.yaml index 01cf06d8c77..a835df8995d 100644 --- a/tests/conf/deepglobelandcover_0.yaml +++ b/tests/conf/deepglobelandcover_0.yaml @@ -3,8 +3,8 @@ experiment: module: loss: "ce" model: "unet" - encoder: "resnet18" - encoder_weights: null + backbone: "resnet18" + weights: null learning_rate: 1e-3 learning_rate_schedule_patience: 6 verbose: false diff --git a/tests/conf/deepglobelandcover_5.yaml b/tests/conf/deepglobelandcover_5.yaml index dd7d26da0c2..b3262962bd0 100644 --- a/tests/conf/deepglobelandcover_5.yaml +++ b/tests/conf/deepglobelandcover_5.yaml @@ -3,8 +3,8 @@ experiment: module: loss: "ce" model: "unet" - encoder: "resnet18" - encoder_weights: null + backbone: "resnet18" + weights: null learning_rate: 1e-3 learning_rate_schedule_patience: 6 verbose: false diff --git a/tests/conf/etci2021.yaml b/tests/conf/etci2021.yaml index 17111f582f5..73fde1dfb87 100644 --- a/tests/conf/etci2021.yaml +++ b/tests/conf/etci2021.yaml @@ -3,8 +3,8 @@ experiment: module: loss: "ce" model: "unet" - encoder: "resnet18" - encoder_weights: null + backbone: "resnet18" + weights: null learning_rate: 1e-3 learning_rate_schedule_patience: 6 in_channels: 6 diff --git a/tests/conf/inria.yaml b/tests/conf/inria.yaml index 19f362914ee..6bc4b5bd7cc 100644 --- a/tests/conf/inria.yaml +++ b/tests/conf/inria.yaml @@ -3,8 +3,8 @@ experiment: module: loss: "ce" model: "unet" - encoder: "resnet18" - encoder_weights: "imagenet" + backbone: "resnet18" + weights: "imagenet" learning_rate: 1e-3 learning_rate_schedule_patience: 6 in_channels: 3 diff --git a/tests/conf/landcoverai.yaml b/tests/conf/landcoverai.yaml index 0f65fe33f65..04ae4a33030 100644 --- a/tests/conf/landcoverai.yaml +++ b/tests/conf/landcoverai.yaml @@ -3,8 +3,8 @@ experiment: module: loss: "ce" model: "unet" - encoder: "resnet18" - encoder_weights: null + backbone: "resnet18" + weights: null learning_rate: 1e-3 learning_rate_schedule_patience: 6 verbose: false diff --git a/tests/conf/naipchesapeake.yaml b/tests/conf/naipchesapeake.yaml index a29d462da57..80a02f56c52 100644 --- a/tests/conf/naipchesapeake.yaml +++ b/tests/conf/naipchesapeake.yaml @@ -3,9 +3,9 @@ experiment: module: loss: "ce" model: "deeplabv3+" - encoder: "resnet34" - encoder_weights: null - encoder_output_stride: 16 + backbone: "resnet34" + weights: null + backbone_output_stride: 16 learning_rate: 1e-3 learning_rate_schedule_patience: 2 in_channels: 4 diff --git a/tests/conf/oscd_all.yaml b/tests/conf/oscd_all.yaml index fb7e2c6fbbf..34857595cd4 100644 --- a/tests/conf/oscd_all.yaml +++ b/tests/conf/oscd_all.yaml @@ -3,8 +3,8 @@ experiment: module: loss: "jaccard" model: "unet" - encoder: "resnet18" - encoder_weights: null + backbone: "resnet18" + weights: null learning_rate: 1e-3 learning_rate_schedule_patience: 6 verbose: false diff --git a/tests/conf/oscd_rgb.yaml b/tests/conf/oscd_rgb.yaml index 0a9ab166d7b..ede707145b8 100644 --- a/tests/conf/oscd_rgb.yaml +++ b/tests/conf/oscd_rgb.yaml @@ -3,8 +3,8 @@ experiment: module: loss: "jaccard" model: "unet" - encoder: "resnet18" - encoder_weights: null + backbone: "resnet18" + weights: null learning_rate: 1e-3 learning_rate_schedule_patience: 6 verbose: false diff --git a/tests/conf/sen12ms_all.yaml b/tests/conf/sen12ms_all.yaml index e7f2def9fe6..03d99fb03b7 100644 --- a/tests/conf/sen12ms_all.yaml +++ b/tests/conf/sen12ms_all.yaml @@ -3,9 +3,9 @@ experiment: module: loss: "ce" model: "unet" - encoder: "resnet18" - encoder_weights: null - encoder_output_stride: 16 + backbone: "resnet18" + weights: null + backbone_output_stride: 16 learning_rate: 1e-3 learning_rate_schedule_patience: 2 in_channels: 15 diff --git a/tests/conf/sen12ms_s1.yaml b/tests/conf/sen12ms_s1.yaml index 16752798951..525f882f53f 100644 --- a/tests/conf/sen12ms_s1.yaml +++ b/tests/conf/sen12ms_s1.yaml @@ -4,9 +4,9 @@ experiment: loss: "focal" model: "fcn" num_filters: 1 - encoder: "resnet18" - encoder_weights: null - encoder_output_stride: 16 + backbone: "resnet18" + weights: null + backbone_output_stride: 16 learning_rate: 1e-3 learning_rate_schedule_patience: 2 in_channels: 2 diff --git a/tests/conf/sen12ms_s2_all.yaml b/tests/conf/sen12ms_s2_all.yaml index b8b5eb0f7fc..612b7cdc55e 100644 --- a/tests/conf/sen12ms_s2_all.yaml +++ b/tests/conf/sen12ms_s2_all.yaml @@ -3,9 +3,9 @@ experiment: module: loss: "ce" model: "unet" - encoder: "resnet18" - encoder_weights: null - encoder_output_stride: 16 + backbone: "resnet18" + weights: null + backbone_output_stride: 16 learning_rate: 1e-3 learning_rate_schedule_patience: 2 in_channels: 13 diff --git a/tests/conf/sen12ms_s2_reduced.yaml b/tests/conf/sen12ms_s2_reduced.yaml index 39d08384ede..6b91332ee7a 100644 --- a/tests/conf/sen12ms_s2_reduced.yaml +++ b/tests/conf/sen12ms_s2_reduced.yaml @@ -3,9 +3,9 @@ experiment: module: loss: "ce" model: "unet" - encoder: "resnet18" - encoder_weights: null - encoder_output_stride: 16 + backbone: "resnet18" + weights: null + backbone_output_stride: 16 learning_rate: 1e-3 learning_rate_schedule_patience: 2 in_channels: 6 diff --git a/tests/trainers/test_segmentation.py b/tests/trainers/test_segmentation.py index f44610431f4..4eda53dd5c9 100644 --- a/tests/trainers/test_segmentation.py +++ b/tests/trainers/test_segmentation.py @@ -102,8 +102,8 @@ def test_no_logger(self) -> None: def model_kwargs(self) -> Dict[Any, Any]: return { "model": "unet", - "encoder": "resnet18", - "encoder_weights": None, + "backbone": "resnet18", + "weights": None, "in_channels": 3, "num_classes": 6, "loss": "ce", diff --git a/torchgeo/trainers/segmentation.py b/torchgeo/trainers/segmentation.py index 4d69b66d1b8..d64ddc648af 100644 --- a/torchgeo/trainers/segmentation.py +++ b/torchgeo/trainers/segmentation.py @@ -34,22 +34,22 @@ class SemanticSegmentationTask(pl.LightningModule): Supports `Segmentation Models Pytorch `_ as an architecture choice in combination with any of these - `TIMM encoders `_. + `TIMM backbones `_. """ def config_task(self) -> None: """Configures the task based on kwargs parameters passed to the constructor.""" if self.hyperparams["model"] == "unet": self.model = smp.Unet( - encoder_name=self.hyperparams["encoder"], - encoder_weights=self.hyperparams["encoder_weights"], + encoder_name=self.hyperparams["backbone"], + encoder_weights=self.hyperparams["weights"], in_channels=self.hyperparams["in_channels"], classes=self.hyperparams["num_classes"], ) elif self.hyperparams["model"] == "deeplabv3+": self.model = smp.DeepLabV3Plus( - encoder_name=self.hyperparams["encoder"], - encoder_weights=self.hyperparams["encoder_weights"], + encoder_name=self.hyperparams["backbone"], + encoder_weights=self.hyperparams["weights"], in_channels=self.hyperparams["in_channels"], classes=self.hyperparams["num_classes"], ) @@ -87,9 +87,9 @@ def __init__(self, **kwargs: Any) -> None: Keyword Args: model: Name of the segmentation model type to use - encoder: Name of the encoder backbone to use - encoder_weights: None or "imagenet" to use imagenet pretrained weights in - the encoder model + backbone: Name of the timm backbone to use + weights: None or "imagenet" to use imagenet pretrained weights in + the backbone in_channels: Number of channels in input image num_classes: Number of semantic classes to predict loss: Name of the loss function, currently supports @@ -105,8 +105,9 @@ def __init__(self, **kwargs: Any) -> None: The *ignore_zeros* parameter was renamed to *ignore_index*. .. versionchanged:: 0.4 - The *segmentation_model* parameter was renamed to *model* and - *encoder_name* renamed to *encoder*. + The *segmentation_model* parameter was renamed to *model*, + *encoder_name* renamed to *backbone*, and + *encoder_weights* to *weights*. """ super().__init__() From f24a4fcfc1b38bd4c6173c6b294436c801c2a094 Mon Sep 17 00:00:00 2001 From: Nils Lehmann Date: Thu, 8 Dec 2022 20:42:36 +0100 Subject: [PATCH 5/5] remove backbone_output_stride from confs --- conf/chesapeake_cvpr.yaml | 1 - conf/naipchesapeake.yaml | 1 - conf/sen12ms.yaml | 1 - tests/conf/chesapeake_cvpr_5.yaml | 1 - tests/conf/naipchesapeake.yaml | 1 - tests/conf/sen12ms_all.yaml | 1 - tests/conf/sen12ms_s1.yaml | 1 - tests/conf/sen12ms_s2_all.yaml | 1 - tests/conf/sen12ms_s2_reduced.yaml | 1 - 9 files changed, 9 deletions(-) diff --git a/conf/chesapeake_cvpr.yaml b/conf/chesapeake_cvpr.yaml index 5834351dec8..00c5e3a05b7 100644 --- a/conf/chesapeake_cvpr.yaml +++ b/conf/chesapeake_cvpr.yaml @@ -11,7 +11,6 @@ experiment: model: "unet" backbone: "resnet18" weights: null - backbone_output_stride: 16 learning_rate: 1e-3 learning_rate_schedule_patience: 6 in_channels: 4 diff --git a/conf/naipchesapeake.yaml b/conf/naipchesapeake.yaml index 6afd851671f..709224eca9d 100644 --- a/conf/naipchesapeake.yaml +++ b/conf/naipchesapeake.yaml @@ -10,7 +10,6 @@ experiment: model: "deeplabv3+" backbone: "resnet34" weights: "imagenet" - backbone_output_stride: 16 learning_rate: 1e-3 learning_rate_schedule_patience: 2 in_channels: 4 diff --git a/conf/sen12ms.yaml b/conf/sen12ms.yaml index 8b334bddcaf..1dba884add1 100644 --- a/conf/sen12ms.yaml +++ b/conf/sen12ms.yaml @@ -10,7 +10,6 @@ experiment: model: "unet" backbone: "resnet18" weights: null - backbone_output_stride: 16 learning_rate: 1e-3 learning_rate_schedule_patience: 2 in_channels: 15 diff --git a/tests/conf/chesapeake_cvpr_5.yaml b/tests/conf/chesapeake_cvpr_5.yaml index beed2621aea..5d9a18c9b65 100644 --- a/tests/conf/chesapeake_cvpr_5.yaml +++ b/tests/conf/chesapeake_cvpr_5.yaml @@ -5,7 +5,6 @@ experiment: model: "unet" backbone: "resnet50" weights: null - backbone_output_stride: 16 learning_rate: 1e-3 learning_rate_schedule_patience: 6 in_channels: 4 diff --git a/tests/conf/naipchesapeake.yaml b/tests/conf/naipchesapeake.yaml index 80a02f56c52..b2d43c44f45 100644 --- a/tests/conf/naipchesapeake.yaml +++ b/tests/conf/naipchesapeake.yaml @@ -5,7 +5,6 @@ experiment: model: "deeplabv3+" backbone: "resnet34" weights: null - backbone_output_stride: 16 learning_rate: 1e-3 learning_rate_schedule_patience: 2 in_channels: 4 diff --git a/tests/conf/sen12ms_all.yaml b/tests/conf/sen12ms_all.yaml index 03d99fb03b7..ecf01b3bc72 100644 --- a/tests/conf/sen12ms_all.yaml +++ b/tests/conf/sen12ms_all.yaml @@ -5,7 +5,6 @@ experiment: model: "unet" backbone: "resnet18" weights: null - backbone_output_stride: 16 learning_rate: 1e-3 learning_rate_schedule_patience: 2 in_channels: 15 diff --git a/tests/conf/sen12ms_s1.yaml b/tests/conf/sen12ms_s1.yaml index 525f882f53f..a5a4f083d9c 100644 --- a/tests/conf/sen12ms_s1.yaml +++ b/tests/conf/sen12ms_s1.yaml @@ -6,7 +6,6 @@ experiment: num_filters: 1 backbone: "resnet18" weights: null - backbone_output_stride: 16 learning_rate: 1e-3 learning_rate_schedule_patience: 2 in_channels: 2 diff --git a/tests/conf/sen12ms_s2_all.yaml b/tests/conf/sen12ms_s2_all.yaml index 612b7cdc55e..dafe781db89 100644 --- a/tests/conf/sen12ms_s2_all.yaml +++ b/tests/conf/sen12ms_s2_all.yaml @@ -5,7 +5,6 @@ experiment: model: "unet" backbone: "resnet18" weights: null - backbone_output_stride: 16 learning_rate: 1e-3 learning_rate_schedule_patience: 2 in_channels: 13 diff --git a/tests/conf/sen12ms_s2_reduced.yaml b/tests/conf/sen12ms_s2_reduced.yaml index 6b91332ee7a..9891c4b44ef 100644 --- a/tests/conf/sen12ms_s2_reduced.yaml +++ b/tests/conf/sen12ms_s2_reduced.yaml @@ -5,7 +5,6 @@ experiment: model: "unet" backbone: "resnet18" weights: null - backbone_output_stride: 16 learning_rate: 1e-3 learning_rate_schedule_patience: 2 in_channels: 6