diff --git a/data/helios/satlas_marine_infra/baseline_satlaspretrain.yaml b/data/helios/satlas_marine_infra/baseline_satlaspretrain.yaml new file mode 100644 index 00000000..12383736 --- /dev/null +++ b/data/helios/satlas_marine_infra/baseline_satlaspretrain.yaml @@ -0,0 +1,131 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslearn.models.swin.Swin + init_args: + pretrained: true + input_channels: 9 + output_layers: [1, 3, 5, 7] + - class_path: rslearn.models.fpn.Fpn + init_args: + in_channels: [128, 256, 512, 1024] + out_channels: 128 + decoders: + detect: + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [4, 8, 16, 32] + num_channels: 128 + num_classes: 3 + anchor_sizes: [[32], [64], [128], [256]] + lr: 0.0001 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 0 + plateau_cooldown: 10 + restore_config: + restore_path: https://ai2-public-datasets.s3.amazonaws.com/satlas/satlas-model-v1-lowres-band-multi.pth + remap_prefixes: + - ["backbone.backbone.backbone.", "encoder.0.model."] +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: gs://rslearn-eai/datasets/marine_infra/dataset_v1/20241210/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B04", "B03", "B02", "B05", "B06", "B07", "B08", "B11", "B12"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: FLOAT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslp.satlas.train.MarineInfraTask + init_args: + property_name: "category" + classes: ["unknown", "platform", "turbine"] + box_size: 15 + remap_values: [[0, 0.25], [0, 255]] + image_bands: [2, 1, 0] + exclude_by_center: true + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + skip_unknown_categories: true + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 4 + num_workers: 32 + default_config: + transforms: + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 3000 + valid_range: [0, 1] + bands: [0, 1, 2] + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 8160 + valid_range: [0, 1] + bands: [3, 4, 5, 6, 7, 8] + - class_path: rslp.transforms.mask.Mask + train_config: + patch_size: 256 + tags: + split: train + nonempty: "yes" + val_config: + patch_size: 256 + tags: + split: val + nonempty: "yes" + test_config: + patch_size: 256 + tags: + split: val + nonempty: "yes" +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max +rslp_project: helios_finetuning +rslp_experiment: 20250404_marine_satlaspretrain_swinb_00 diff --git a/data/helios/satlas_marine_infra/baseline_satlaspretrain_128.yaml b/data/helios/satlas_marine_infra/baseline_satlaspretrain_128.yaml new file mode 100644 index 00000000..dce90f7d --- /dev/null +++ b/data/helios/satlas_marine_infra/baseline_satlaspretrain_128.yaml @@ -0,0 +1,133 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslearn.models.swin.Swin + init_args: + pretrained: true + input_channels: 9 + output_layers: [1, 3, 5, 7] + - class_path: rslearn.models.fpn.Fpn + init_args: + in_channels: [128, 256, 512, 1024] + out_channels: 128 + decoders: + detect: + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [4, 8, 16, 32] + num_channels: 128 + num_classes: 3 + anchor_sizes: [[32], [64], [128], [256]] + lr: 0.0001 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 0 + plateau_cooldown: 10 + restore_config: + restore_path: https://ai2-public-datasets.s3.amazonaws.com/satlas/satlas-model-v1-lowres-band-multi.pth + remap_prefixes: + - ["backbone.backbone.backbone.", "encoder.0.model."] +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: gs://rslearn-eai/datasets/marine_infra/dataset_v1/20241210/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B04", "B03", "B02", "B05", "B06", "B07", "B08", "B11", "B12"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: FLOAT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslp.satlas.train.MarineInfraTask + init_args: + property_name: "category" + classes: ["unknown", "platform", "turbine"] + box_size: 15 + remap_values: [[0, 0.25], [0, 255]] + image_bands: [2, 1, 0] + exclude_by_center: true + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + skip_unknown_categories: true + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 4 + num_workers: 32 + default_config: + transforms: + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 3000 + valid_range: [0, 1] + bands: [0, 1, 2] + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 8160 + valid_range: [0, 1] + bands: [3, 4, 5, 6, 7, 8] + - class_path: rslp.transforms.mask.Mask + train_config: + patch_size: 128 + tags: + split: train + nonempty: "yes" + val_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" + test_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max +rslp_project: helios_finetuning +rslp_experiment: 20250514_marine_satlaspretrain_swinb_128_00 diff --git a/data/helios/satlas_marine_infra/baseline_satlaspretrain_detr.yaml b/data/helios/satlas_marine_infra/baseline_satlaspretrain_detr.yaml new file mode 100644 index 00000000..5bf0e62f --- /dev/null +++ b/data/helios/satlas_marine_infra/baseline_satlaspretrain_detr.yaml @@ -0,0 +1,136 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslearn.models.swin.Swin + init_args: + pretrained: true + input_channels: 9 + output_layers: [3] + decoders: + detect: + - class_path: rslearn.models.detr.Detr + init_args: + predictor: + in_channels: 256 + num_classes: 2 + num_queries: 32 + transformer: + num_encoder_layers: 4 + num_decoder_layers: 4 + d_model: 256 + aux_loss: true + criterion: + num_classes: 2 + lr: 0.0001 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 0 + plateau_cooldown: 10 + restore_config: + restore_path: https://ai2-public-datasets.s3.amazonaws.com/satlas/satlas-model-v1-lowres-band-multi.pth + remap_prefixes: + - ["backbone.backbone.backbone.", "encoder.0.model."] +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: gs://rslearn-eai/datasets/marine_infra/dataset_v1/20241210/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B04", "B03", "B02", "B05", "B06", "B07", "B08", "B11", "B12"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: FLOAT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslp.satlas.train.MarineInfraTask + init_args: + property_name: "category" + classes: ["platform", "turbine"] + box_size: 15 + remap_values: [[0, 0.25], [0, 255]] + image_bands: [2, 1, 0] + exclude_by_center: true + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + skip_unknown_categories: true + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 4 + num_workers: 32 + default_config: + transforms: + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 3000 + valid_range: [0, 1] + bands: [0, 1, 2] + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 8160 + valid_range: [0, 1] + bands: [3, 4, 5, 6, 7, 8] + - class_path: rslp.transforms.mask.Mask + train_config: + patch_size: 128 + tags: + split: train + nonempty: "yes" + val_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" + test_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max +rslp_project: helios_finetuning +rslp_experiment: 20250514_marine_satlaspretrain_swinb_detr_00 diff --git a/data/helios/satlas_marine_infra/finetune.yaml b/data/helios/satlas_marine_infra/finetune.yaml index 34e299f6..8d3d9d41 100644 --- a/data/helios/satlas_marine_infra/finetune.yaml +++ b/data/helios/satlas_marine_infra/finetune.yaml @@ -97,7 +97,7 @@ data: input_mapping: detect: targets: "targets" - batch_size: 4 + batch_size: 2 num_workers: 32 default_config: transforms: diff --git a/data/helios/satlas_marine_infra/finetune_128.yaml b/data/helios/satlas_marine_infra/finetune_128.yaml new file mode 100644 index 00000000..2a4c3646 --- /dev/null +++ b/data/helios/satlas_marine_infra/finetune_128.yaml @@ -0,0 +1,154 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslp.helios.model.Helios + init_args: + checkpoint_path: "{CHECKPOINT_PATH}" + selector: ["encoder"] + forward_kwargs: + patch_size: {PATCH_SIZE} + decoders: + detect: + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: {ENCODER_EMBEDDING_SIZE} + out_channels: 192 + kernel_size: 3 + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: 192 + out_channels: 192 + kernel_size: 3 + activation: + class_path: torch.nn.LayerNorm + init_args: + normalized_shape: [192, {128/PATCH_SIZE}, {128/PATCH_SIZE}] + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: 192 + out_channels: 192 + kernel_size: 3 + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: 192 + out_channels: 192 + kernel_size: 3 + activation: + class_path: torch.nn.Identity + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [{PATCH_SIZE}] + num_channels: 192 + num_classes: 3 + anchor_sizes: [[32]] + lr: 0.0001 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 0 + plateau_cooldown: 10 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: gs://rslearn-eai/datasets/marine_infra/dataset_v1/20241210/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: FLOAT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslp.satlas.train.MarineInfraTask + init_args: + property_name: "category" + classes: ["unknown", "platform", "turbine"] + box_size: 15 + remap_values: [[0, 0.25], [0, 255]] + image_bands: [2, 1, 0] + exclude_by_center: true + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + skip_unknown_categories: true + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 4 + num_workers: 32 + default_config: + transforms: + - class_path: rslp.transforms.mask.Mask + - class_path: rslearn.train.transforms.concatenate.Concatenate + init_args: + selections: + image: [] + output_selector: sentinel2_l2a + - class_path: rslp.helios.norm.HeliosNormalize + init_args: + config_fname: "/opt/helios/data/norm_configs/computed.json" + band_names: + sentinel2_l2a: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + train_config: + patch_size: 128 + tags: + split: train + nonempty: "yes" + val_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" + test_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0] + unfreeze_at_epoch: 2 +rslp_project: helios_finetuning +rslp_experiment: placeholder diff --git a/data/helios/satlas_marine_infra/finetune_detr.yaml b/data/helios/satlas_marine_infra/finetune_detr.yaml new file mode 100644 index 00000000..7e1b7bb4 --- /dev/null +++ b/data/helios/satlas_marine_infra/finetune_detr.yaml @@ -0,0 +1,174 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslp.helios.model.Helios + init_args: + #checkpoint_path: "{CHECKPOINT_PATH}" + checkpoint_path: "/weka/dfive-default/helios/checkpoints/favyen/20250502_train_budget6000/step168500" + selector: ["encoder"] + forward_kwargs: + #patch_size: {PATCH_SIZE} + patch_size: 8 + decoders: + detect: + #- class_path: rslearn.models.conv.Conv + # init_args: + # #in_channels: {ENCODER_EMBEDDING_SIZE} + # in_channels: 768 + # out_channels: 192 + # kernel_size: 3 + #- class_path: rslearn.models.conv.Conv + # init_args: + # in_channels: 192 + # out_channels: 192 + # kernel_size: 3 + # activation: + # class_path: torch.nn.LayerNorm + # init_args: + # #normalized_shape: [192, {256/PATCH_SIZE}, {256/PATCH_SIZE}] + # normalized_shape: [192, 32, 32] + #- class_path: rslearn.models.conv.Conv + # init_args: + # in_channels: 192 + # out_channels: 192 + # kernel_size: 3 + #- class_path: rslearn.models.conv.Conv + # init_args: + # in_channels: 192 + # out_channels: 192 + # kernel_size: 3 + # activation: + # class_path: torch.nn.Identity + - class_path: rslearn.models.conv.Conv + init_args: + #in_channels: {ENCODER_EMBEDDING_SIZE} + in_channels: 768 + out_channels: 256 + kernel_size: 3 + activation: + class_path: torch.nn.Identity + - class_path: rslearn.models.detr.Detr + init_args: + predictor: + in_channels: 256 + num_classes: 2 + num_queries: 32 + transformer: + num_encoder_layers: 4 + num_decoder_layers: 4 + d_model: 256 + aux_loss: true + criterion: + num_classes: 2 + lr: 0.0001 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 0 + plateau_cooldown: 10 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: gs://rslearn-eai/datasets/marine_infra/dataset_v1/20241210/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: FLOAT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslp.satlas.train.MarineInfraTask + init_args: + property_name: "category" + classes: ["platform", "turbine"] + box_size: 15 + remap_values: [[0, 0.25], [0, 255]] + image_bands: [2, 1, 0] + exclude_by_center: true + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + skip_unknown_categories: true + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 4 + num_workers: 32 + default_config: + transforms: + - class_path: rslp.transforms.mask.Mask + - class_path: rslearn.train.transforms.concatenate.Concatenate + init_args: + selections: + image: [] + output_selector: sentinel2_l2a + - class_path: rslp.helios.norm.HeliosNormalize + init_args: + config_fname: "/opt/helios/data/norm_configs/computed.json" + band_names: + sentinel2_l2a: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + train_config: + patch_size: 128 + tags: + split: train + nonempty: "yes" + val_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" + test_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0] + unfreeze_at_epoch: 30 +rslp_project: helios_finetuning +#rslp_experiment: placeholder +rslp_experiment: 20250514_marine_20250502_train_budget6000_detr_00 diff --git a/data/helios/satlas_marine_infra/random_128.yaml b/data/helios/satlas_marine_infra/random_128.yaml new file mode 100644 index 00000000..b67adc47 --- /dev/null +++ b/data/helios/satlas_marine_infra/random_128.yaml @@ -0,0 +1,151 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslp.helios.model.Helios + init_args: + checkpoint_path: "{CHECKPOINT_PATH}" + selector: ["encoder"] + forward_kwargs: + patch_size: {PATCH_SIZE} + random_initialization: true + decoders: + detect: + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: {ENCODER_EMBEDDING_SIZE} + out_channels: 192 + kernel_size: 3 + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: 192 + out_channels: 192 + kernel_size: 3 + activation: + class_path: torch.nn.LayerNorm + init_args: + normalized_shape: [192, {128/PATCH_SIZE}, {128/PATCH_SIZE}] + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: 192 + out_channels: 192 + kernel_size: 3 + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: 192 + out_channels: 192 + kernel_size: 3 + activation: + class_path: torch.nn.Identity + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [{PATCH_SIZE}] + num_channels: 192 + num_classes: 3 + anchor_sizes: [[32]] + lr: 0.0001 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 0 + plateau_cooldown: 10 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: gs://rslearn-eai/datasets/marine_infra/dataset_v1/20241210/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: FLOAT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslp.satlas.train.MarineInfraTask + init_args: + property_name: "category" + classes: ["unknown", "platform", "turbine"] + box_size: 15 + remap_values: [[0, 0.25], [0, 255]] + image_bands: [2, 1, 0] + exclude_by_center: true + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + skip_unknown_categories: true + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 4 + num_workers: 32 + default_config: + transforms: + - class_path: rslp.transforms.mask.Mask + - class_path: rslearn.train.transforms.concatenate.Concatenate + init_args: + selections: + image: [] + output_selector: sentinel2_l2a + - class_path: rslp.helios.norm.HeliosNormalize + init_args: + config_fname: "/opt/helios/data/norm_configs/computed.json" + band_names: + sentinel2_l2a: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + train_config: + patch_size: 128 + tags: + split: train + nonempty: "yes" + val_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" + test_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max +rslp_project: helios_finetuning +rslp_experiment: placeholder diff --git a/data/helios/satlas_marine_infra_128/baseline_imagenet_swinb.yaml b/data/helios/satlas_marine_infra_128/baseline_imagenet_swinb.yaml new file mode 100644 index 00000000..41ed72dd --- /dev/null +++ b/data/helios/satlas_marine_infra_128/baseline_imagenet_swinb.yaml @@ -0,0 +1,138 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslearn.models.swin.Swin + init_args: + pretrained: true + input_channels: 9 + output_layers: [1, 3, 5, 7] + - class_path: rslearn.models.fpn.Fpn + init_args: + in_channels: [128, 256, 512, 1024] + out_channels: 128 + decoders: + detect: + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [4, 8, 16, 32] + num_channels: 128 + num_classes: 3 + anchor_sizes: [[32], [64], [128], [256]] + lr: 0.0001 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 0 + plateau_cooldown: 10 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/marine_infra/dataset_v1/20241210/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B04", "B03", "B02", "B05", "B06", "B07", "B08", "B11", "B12"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: FLOAT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslp.satlas.train.MarineInfraTask + init_args: + property_name: "category" + classes: ["unknown", "platform", "turbine"] + box_size: 15 + remap_values: [[0, 0.25], [0, 255]] + image_bands: [2, 1, 0] + exclude_by_center: true + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + skip_unknown_categories: true + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 4 + num_workers: 32 + default_config: + transforms: + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 3000 + valid_range: [0, 1] + bands: [0, 1, 2] + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 8160 + valid_range: [0, 1] + bands: [3, 4, 5, 6, 7, 8] + - class_path: rslp.transforms.mask.Mask + train_config: + patch_size: 128 + tags: + split: train + nonempty: "yes" + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 32768 + val_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" + test_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0] + unfreeze_at_epoch: 2 +rslp_project: 2025_05_29_helios_finetuning +rslp_experiment: 20250523_satlas_marine_infra_128_imagenet_swinb_12 diff --git a/data/helios/satlas_marine_infra_128/baseline_random_swinb.yaml b/data/helios/satlas_marine_infra_128/baseline_random_swinb.yaml new file mode 100644 index 00000000..35dadde2 --- /dev/null +++ b/data/helios/satlas_marine_infra_128/baseline_random_swinb.yaml @@ -0,0 +1,138 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslearn.models.swin.Swin + init_args: + pretrained: false + input_channels: 9 + output_layers: [1, 3, 5, 7] + - class_path: rslearn.models.fpn.Fpn + init_args: + in_channels: [128, 256, 512, 1024] + out_channels: 128 + decoders: + detect: + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [4, 8, 16, 32] + num_channels: 128 + num_classes: 3 + anchor_sizes: [[32], [64], [128], [256]] + lr: 0.0001 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 0 + plateau_cooldown: 10 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/marine_infra/dataset_v1/20241210/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B04", "B03", "B02", "B05", "B06", "B07", "B08", "B11", "B12"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: FLOAT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslp.satlas.train.MarineInfraTask + init_args: + property_name: "category" + classes: ["unknown", "platform", "turbine"] + box_size: 15 + remap_values: [[0, 0.25], [0, 255]] + image_bands: [2, 1, 0] + exclude_by_center: true + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + skip_unknown_categories: true + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 4 + num_workers: 32 + default_config: + transforms: + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 3000 + valid_range: [0, 1] + bands: [0, 1, 2] + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 8160 + valid_range: [0, 1] + bands: [3, 4, 5, 6, 7, 8] + - class_path: rslp.transforms.mask.Mask + train_config: + patch_size: 128 + tags: + split: train + nonempty: "yes" + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 32768 + val_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" + test_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0] + unfreeze_at_epoch: 2 +rslp_project: 2025_05_29_helios_finetuning +rslp_experiment: 20250523_satlas_marine_infra_128_random_swinb_12 diff --git a/data/helios/satlas_marine_infra_128/baseline_satlaspretrain_swinb.yaml b/data/helios/satlas_marine_infra_128/baseline_satlaspretrain_swinb.yaml new file mode 100644 index 00000000..7d558c28 --- /dev/null +++ b/data/helios/satlas_marine_infra_128/baseline_satlaspretrain_swinb.yaml @@ -0,0 +1,142 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslearn.models.swin.Swin + init_args: + pretrained: true + input_channels: 9 + output_layers: [1, 3, 5, 7] + - class_path: rslearn.models.fpn.Fpn + init_args: + in_channels: [128, 256, 512, 1024] + out_channels: 128 + decoders: + detect: + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [4, 8, 16, 32] + num_channels: 128 + num_classes: 3 + anchor_sizes: [[32], [64], [128], [256]] + lr: 0.0001 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 0 + plateau_cooldown: 10 + restore_config: + restore_path: https://ai2-public-datasets.s3.amazonaws.com/satlas/satlas-model-v1-lowres-band-multi.pth + remap_prefixes: + - ["backbone.backbone.backbone.", "encoder.0.model."] +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/marine_infra/dataset_v1/20241210/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B04", "B03", "B02", "B05", "B06", "B07", "B08", "B11", "B12"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: FLOAT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslp.satlas.train.MarineInfraTask + init_args: + property_name: "category" + classes: ["unknown", "platform", "turbine"] + box_size: 15 + remap_values: [[0, 0.25], [0, 255]] + image_bands: [2, 1, 0] + exclude_by_center: true + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + skip_unknown_categories: true + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 4 + num_workers: 32 + default_config: + transforms: + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 3000 + valid_range: [0, 1] + bands: [0, 1, 2] + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 8160 + valid_range: [0, 1] + bands: [3, 4, 5, 6, 7, 8] + - class_path: rslp.transforms.mask.Mask + train_config: + patch_size: 128 + tags: + split: train + nonempty: "yes" + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 32768 + val_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" + test_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0] + unfreeze_at_epoch: 2 +rslp_project: 2025_05_29_helios_finetuning +rslp_experiment: 20250523_satlas_marine_infra_128_satlaspretrain_swinb_12 diff --git a/data/helios/satlas_marine_infra_128/debugdebug.yaml b/data/helios/satlas_marine_infra_128/debugdebug.yaml new file mode 100644 index 00000000..650cd9d0 --- /dev/null +++ b/data/helios/satlas_marine_infra_128/debugdebug.yaml @@ -0,0 +1,138 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslearn.models.swin.Swin + init_args: + pretrained: false + input_channels: 9 + output_layers: [1, 3, 5, 7] + - class_path: rslearn.models.fpn.Fpn + init_args: + in_channels: [128, 256, 512, 1024] + out_channels: 128 + decoders: + detect: + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [4, 8, 16, 32] + num_channels: 128 + num_classes: 3 + anchor_sizes: [[32], [64], [128], [256]] + lr: 0.0001 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 0 + plateau_cooldown: 10 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/marine_infra/dataset_v1/20241210/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B04", "B03", "B02", "B05", "B06", "B07", "B08", "B11", "B12"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: FLOAT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslp.satlas.train.MarineInfraTask + init_args: + property_name: "category" + classes: ["unknown", "platform", "turbine"] + box_size: 15 + remap_values: [[0, 0.25], [0, 255]] + image_bands: [2, 1, 0] + exclude_by_center: true + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + skip_unknown_categories: true + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 4 + num_workers: 32 + default_config: + transforms: + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 3000 + valid_range: [0, 1] + bands: [0, 1, 2] + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 8160 + valid_range: [0, 1] + bands: [3, 4, 5, 6, 7, 8] + - class_path: rslp.transforms.mask.Mask + train_config: + patch_size: 128 + tags: + split: train + nonempty: "yes" + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 32768 + val_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" + test_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0] + unfreeze_at_epoch: 2 +rslp_project: 2025_05_23_helios_finetuning +rslp_experiment: debugdebug_10 diff --git a/data/helios/satlas_marine_infra_128/finetune.yaml b/data/helios/satlas_marine_infra_128/finetune.yaml new file mode 100644 index 00000000..be85aeca --- /dev/null +++ b/data/helios/satlas_marine_infra_128/finetune.yaml @@ -0,0 +1,159 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslp.helios.model.Helios + init_args: + checkpoint_path: "{CHECKPOINT_PATH}" + selector: ["encoder"] + forward_kwargs: + patch_size: {PATCH_SIZE} + decoders: + detect: + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: {ENCODER_EMBEDDING_SIZE} + out_channels: 192 + kernel_size: 3 + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: 192 + out_channels: 192 + kernel_size: 3 + activation: + class_path: torch.nn.LayerNorm + init_args: + normalized_shape: [192, {128/PATCH_SIZE}, {128/PATCH_SIZE}] + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: 192 + out_channels: 192 + kernel_size: 3 + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: 192 + out_channels: 192 + kernel_size: 3 + activation: + class_path: torch.nn.Identity + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [{PATCH_SIZE}] + num_channels: 192 + num_classes: 3 + anchor_sizes: [[32]] + lr: 0.0001 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 0 + plateau_cooldown: 10 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/marine_infra/dataset_v1/20241210/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: FLOAT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslp.satlas.train.MarineInfraTask + init_args: + property_name: "category" + classes: ["unknown", "platform", "turbine"] + box_size: 15 + remap_values: [[0, 0.25], [0, 255]] + image_bands: [2, 1, 0] + exclude_by_center: true + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + skip_unknown_categories: true + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 4 + num_workers: 32 + default_config: + transforms: + - class_path: rslp.transforms.mask.Mask + - class_path: rslearn.train.transforms.concatenate.Concatenate + init_args: + selections: + image: [] + output_selector: sentinel2_l2a + - class_path: rslp.helios.norm.HeliosNormalize + init_args: + config_fname: "/opt/helios/data/norm_configs/computed.json" + band_names: + sentinel2_l2a: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + train_config: + patch_size: 128 + tags: + split: train + nonempty: "yes" + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 32768 + val_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" + test_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0] + unfreeze_at_epoch: 2 +rslp_project: 2025_05_23_helios_finetuning +rslp_experiment: placeholder diff --git a/data/helios/satlas_marine_infra_128/finetune_direct1.yaml b/data/helios/satlas_marine_infra_128/finetune_direct1.yaml new file mode 100644 index 00000000..f37f0613 --- /dev/null +++ b/data/helios/satlas_marine_infra_128/finetune_direct1.yaml @@ -0,0 +1,159 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslp.helios.model.Helios + init_args: + checkpoint_path: "{CHECKPOINT_PATH}" + selector: ["encoder"] + forward_kwargs: + patch_size: {PATCH_SIZE} + decoders: + detect: + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: {ENCODER_EMBEDDING_SIZE} + out_channels: {ENCODER_EMBEDDING_SIZE} + kernel_size: 3 + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: {ENCODER_EMBEDDING_SIZE} + out_channels: {ENCODER_EMBEDDING_SIZE} + kernel_size: 3 + activation: + class_path: torch.nn.LayerNorm + init_args: + normalized_shape: [{ENCODER_EMBEDDING_SIZE}, {128/PATCH_SIZE}, {128/PATCH_SIZE}] + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: {ENCODER_EMBEDDING_SIZE} + out_channels: {ENCODER_EMBEDDING_SIZE} + kernel_size: 3 + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: {ENCODER_EMBEDDING_SIZE} + out_channels: {ENCODER_EMBEDDING_SIZE} + kernel_size: 3 + activation: + class_path: torch.nn.Identity + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [{PATCH_SIZE}] + num_channels: {ENCODER_EMBEDDING_SIZE} + num_classes: 3 + anchor_sizes: [[32]] + lr: 0.0001 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 0 + plateau_cooldown: 10 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/marine_infra/dataset_v1/20241210/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: FLOAT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslp.satlas.train.MarineInfraTask + init_args: + property_name: "category" + classes: ["unknown", "platform", "turbine"] + box_size: 15 + remap_values: [[0, 0.25], [0, 255]] + image_bands: [2, 1, 0] + exclude_by_center: true + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + skip_unknown_categories: true + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 4 + num_workers: 32 + default_config: + transforms: + - class_path: rslp.transforms.mask.Mask + - class_path: rslearn.train.transforms.concatenate.Concatenate + init_args: + selections: + image: [] + output_selector: sentinel2_l2a + - class_path: rslp.helios.norm.HeliosNormalize + init_args: + config_fname: "/opt/helios/data/norm_configs/computed.json" + band_names: + sentinel2_l2a: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + train_config: + patch_size: 128 + tags: + split: train + nonempty: "yes" + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 32768 + val_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" + test_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0] + unfreeze_at_epoch: 2 +rslp_project: 2025_05_23_helios_finetuning +rslp_experiment: placeholder diff --git a/data/helios/satlas_marine_infra_128/finetune_direct2.yaml b/data/helios/satlas_marine_infra_128/finetune_direct2.yaml new file mode 100644 index 00000000..d269b746 --- /dev/null +++ b/data/helios/satlas_marine_infra_128/finetune_direct2.yaml @@ -0,0 +1,133 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslp.helios.model.Helios + init_args: + checkpoint_path: "{CHECKPOINT_PATH}" + selector: ["encoder"] + forward_kwargs: + patch_size: {PATCH_SIZE} + decoders: + detect: + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [{PATCH_SIZE}] + num_channels: {ENCODER_EMBEDDING_SIZE} + num_classes: 3 + anchor_sizes: [[32]] + lr: 0.0001 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 0 + plateau_cooldown: 10 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/marine_infra/dataset_v1/20241210/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: FLOAT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslp.satlas.train.MarineInfraTask + init_args: + property_name: "category" + classes: ["unknown", "platform", "turbine"] + box_size: 15 + remap_values: [[0, 0.25], [0, 255]] + image_bands: [2, 1, 0] + exclude_by_center: true + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + skip_unknown_categories: true + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 4 + num_workers: 32 + default_config: + transforms: + - class_path: rslp.transforms.mask.Mask + - class_path: rslearn.train.transforms.concatenate.Concatenate + init_args: + selections: + image: [] + output_selector: sentinel2_l2a + - class_path: rslp.helios.norm.HeliosNormalize + init_args: + config_fname: "/opt/helios/data/norm_configs/computed.json" + band_names: + sentinel2_l2a: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + train_config: + patch_size: 128 + tags: + split: train + nonempty: "yes" + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 32768 + val_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" + test_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0] + unfreeze_at_epoch: 2 +rslp_project: 2025_05_23_helios_finetuning +rslp_experiment: placeholder diff --git a/data/helios/satlas_marine_infra_128/finetune_direct2_frozen.yaml b/data/helios/satlas_marine_infra_128/finetune_direct2_frozen.yaml new file mode 100644 index 00000000..f4bb7e3e --- /dev/null +++ b/data/helios/satlas_marine_infra_128/finetune_direct2_frozen.yaml @@ -0,0 +1,132 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslp.helios.model.Helios + init_args: + checkpoint_path: "{CHECKPOINT_PATH}" + selector: ["encoder"] + forward_kwargs: + patch_size: {PATCH_SIZE} + decoders: + detect: + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [{PATCH_SIZE}] + num_channels: {ENCODER_EMBEDDING_SIZE} + num_classes: 3 + anchor_sizes: [[32]] + lr: 0.0005 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 0 + plateau_cooldown: 20 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/marine_infra/dataset_v1/20241210/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: FLOAT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslp.satlas.train.MarineInfraTask + init_args: + property_name: "category" + classes: ["unknown", "platform", "turbine"] + box_size: 15 + remap_values: [[0, 0.25], [0, 255]] + image_bands: [2, 1, 0] + exclude_by_center: true + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + skip_unknown_categories: true + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 4 + num_workers: 32 + default_config: + transforms: + - class_path: rslp.transforms.mask.Mask + - class_path: rslearn.train.transforms.concatenate.Concatenate + init_args: + selections: + image: [] + output_selector: sentinel2_l2a + - class_path: rslp.helios.norm.HeliosNormalize + init_args: + config_fname: "/opt/helios/data/norm_configs/computed.json" + band_names: + sentinel2_l2a: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + train_config: + patch_size: 128 + tags: + split: train + nonempty: "yes" + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 32768 + val_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" + test_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0] +rslp_project: 2025_05_29_helios_finetuning +rslp_experiment: placeholder diff --git a/data/helios/satlas_marine_infra_128/finetune_direct2_longfreeze.yaml b/data/helios/satlas_marine_infra_128/finetune_direct2_longfreeze.yaml new file mode 100644 index 00000000..6a492611 --- /dev/null +++ b/data/helios/satlas_marine_infra_128/finetune_direct2_longfreeze.yaml @@ -0,0 +1,133 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslp.helios.model.Helios + init_args: + checkpoint_path: "{CHECKPOINT_PATH}" + selector: ["encoder"] + forward_kwargs: + patch_size: {PATCH_SIZE} + decoders: + detect: + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [{PATCH_SIZE}] + num_channels: {ENCODER_EMBEDDING_SIZE} + num_classes: 3 + anchor_sizes: [[32]] + lr: 0.0005 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 0 + plateau_cooldown: 10 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/marine_infra/dataset_v1/20241210/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: FLOAT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslp.satlas.train.MarineInfraTask + init_args: + property_name: "category" + classes: ["unknown", "platform", "turbine"] + box_size: 15 + remap_values: [[0, 0.25], [0, 255]] + image_bands: [2, 1, 0] + exclude_by_center: true + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + skip_unknown_categories: true + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 4 + num_workers: 32 + default_config: + transforms: + - class_path: rslp.transforms.mask.Mask + - class_path: rslearn.train.transforms.concatenate.Concatenate + init_args: + selections: + image: [] + output_selector: sentinel2_l2a + - class_path: rslp.helios.norm.HeliosNormalize + init_args: + config_fname: "/opt/helios/data/norm_configs/computed.json" + band_names: + sentinel2_l2a: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + train_config: + patch_size: 128 + tags: + split: train + nonempty: "yes" + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 32768 + val_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" + test_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0] + unfreeze_at_epoch: 30 +rslp_project: 2025_05_23_helios_finetuning +rslp_experiment: placeholder diff --git a/data/helios/satlas_marine_infra_128/finetune_direct2_longfreeze_lowlr.yaml b/data/helios/satlas_marine_infra_128/finetune_direct2_longfreeze_lowlr.yaml new file mode 100644 index 00000000..6659080e --- /dev/null +++ b/data/helios/satlas_marine_infra_128/finetune_direct2_longfreeze_lowlr.yaml @@ -0,0 +1,134 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslp.helios.model.Helios + init_args: + checkpoint_path: "{CHECKPOINT_PATH}" + selector: ["encoder"] + forward_kwargs: + patch_size: {PATCH_SIZE} + decoders: + detect: + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [{PATCH_SIZE}] + num_channels: {ENCODER_EMBEDDING_SIZE} + num_classes: 3 + anchor_sizes: [[32]] + lr: 0.0005 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 0 + plateau_cooldown: 20 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/marine_infra/dataset_v1/20241210/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: FLOAT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslp.satlas.train.MarineInfraTask + init_args: + property_name: "category" + classes: ["unknown", "platform", "turbine"] + box_size: 15 + remap_values: [[0, 0.25], [0, 255]] + image_bands: [2, 1, 0] + exclude_by_center: true + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + skip_unknown_categories: true + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 4 + num_workers: 32 + default_config: + transforms: + - class_path: rslp.transforms.mask.Mask + - class_path: rslearn.train.transforms.concatenate.Concatenate + init_args: + selections: + image: [] + output_selector: sentinel2_l2a + - class_path: rslp.helios.norm.HeliosNormalize + init_args: + config_fname: "/opt/helios/data/norm_configs/computed.json" + band_names: + sentinel2_l2a: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + train_config: + patch_size: 128 + tags: + split: train + nonempty: "yes" + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 32768 + val_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" + test_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0] + unfreeze_at_epoch: 30 + unfreeze_lr_factor: 10 +rslp_project: 2025_05_29_helios_finetuning +rslp_experiment: placeholder diff --git a/data/helios/satlas_marine_infra_128/finetune_direct2_lowlr.yaml b/data/helios/satlas_marine_infra_128/finetune_direct2_lowlr.yaml new file mode 100644 index 00000000..3bc87b7e --- /dev/null +++ b/data/helios/satlas_marine_infra_128/finetune_direct2_lowlr.yaml @@ -0,0 +1,134 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslp.helios.model.Helios + init_args: + checkpoint_path: "{CHECKPOINT_PATH}" + selector: ["encoder"] + forward_kwargs: + patch_size: {PATCH_SIZE} + decoders: + detect: + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [{PATCH_SIZE}] + num_channels: {ENCODER_EMBEDDING_SIZE} + num_classes: 3 + anchor_sizes: [[32]] + lr: 0.0005 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 0 + plateau_cooldown: 20 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/marine_infra/dataset_v1/20241210/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: FLOAT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslp.satlas.train.MarineInfraTask + init_args: + property_name: "category" + classes: ["unknown", "platform", "turbine"] + box_size: 15 + remap_values: [[0, 0.25], [0, 255]] + image_bands: [2, 1, 0] + exclude_by_center: true + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + skip_unknown_categories: true + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 4 + num_workers: 32 + default_config: + transforms: + - class_path: rslp.transforms.mask.Mask + - class_path: rslearn.train.transforms.concatenate.Concatenate + init_args: + selections: + image: [] + output_selector: sentinel2_l2a + - class_path: rslp.helios.norm.HeliosNormalize + init_args: + config_fname: "/opt/helios/data/norm_configs/computed.json" + band_names: + sentinel2_l2a: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + train_config: + patch_size: 128 + tags: + split: train + nonempty: "yes" + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 32768 + val_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" + test_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0] + unfreeze_at_epoch: 0 + unfreeze_lr_factor: 10 +rslp_project: 2025_05_29_helios_finetuning +rslp_experiment: placeholder diff --git a/data/helios/satlas_marine_infra_128/finetune_direct2_unfrozen.yaml b/data/helios/satlas_marine_infra_128/finetune_direct2_unfrozen.yaml new file mode 100644 index 00000000..bdc9372c --- /dev/null +++ b/data/helios/satlas_marine_infra_128/finetune_direct2_unfrozen.yaml @@ -0,0 +1,129 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslp.helios.model.Helios + init_args: + checkpoint_path: "{CHECKPOINT_PATH}" + selector: ["encoder"] + forward_kwargs: + patch_size: {PATCH_SIZE} + decoders: + detect: + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [{PATCH_SIZE}] + num_channels: {ENCODER_EMBEDDING_SIZE} + num_classes: 3 + anchor_sizes: [[32]] + lr: 0.0005 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 0 + plateau_cooldown: 20 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/marine_infra/dataset_v1/20241210/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: FLOAT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslp.satlas.train.MarineInfraTask + init_args: + property_name: "category" + classes: ["unknown", "platform", "turbine"] + box_size: 15 + remap_values: [[0, 0.25], [0, 255]] + image_bands: [2, 1, 0] + exclude_by_center: true + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + skip_unknown_categories: true + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 4 + num_workers: 32 + default_config: + transforms: + - class_path: rslp.transforms.mask.Mask + - class_path: rslearn.train.transforms.concatenate.Concatenate + init_args: + selections: + image: [] + output_selector: sentinel2_l2a + - class_path: rslp.helios.norm.HeliosNormalize + init_args: + config_fname: "/opt/helios/data/norm_configs/computed.json" + band_names: + sentinel2_l2a: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + train_config: + patch_size: 128 + tags: + split: train + nonempty: "yes" + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 32768 + val_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" + test_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max +rslp_project: 2025_05_29_helios_finetuning +rslp_experiment: placeholder diff --git a/data/helios/satlas_marine_infra_128/finetune_longfreeze.yaml b/data/helios/satlas_marine_infra_128/finetune_longfreeze.yaml new file mode 100644 index 00000000..2182ef41 --- /dev/null +++ b/data/helios/satlas_marine_infra_128/finetune_longfreeze.yaml @@ -0,0 +1,159 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslp.helios.model.Helios + init_args: + checkpoint_path: "{CHECKPOINT_PATH}" + selector: ["encoder"] + forward_kwargs: + patch_size: {PATCH_SIZE} + decoders: + detect: + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: {ENCODER_EMBEDDING_SIZE} + out_channels: 192 + kernel_size: 3 + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: 192 + out_channels: 192 + kernel_size: 3 + activation: + class_path: torch.nn.LayerNorm + init_args: + normalized_shape: [192, {128/PATCH_SIZE}, {128/PATCH_SIZE}] + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: 192 + out_channels: 192 + kernel_size: 3 + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: 192 + out_channels: 192 + kernel_size: 3 + activation: + class_path: torch.nn.Identity + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [{PATCH_SIZE}] + num_channels: 192 + num_classes: 3 + anchor_sizes: [[32]] + lr: 0.0005 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 0 + plateau_cooldown: 10 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/marine_infra/dataset_v1/20241210/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: FLOAT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslp.satlas.train.MarineInfraTask + init_args: + property_name: "category" + classes: ["unknown", "platform", "turbine"] + box_size: 15 + remap_values: [[0, 0.25], [0, 255]] + image_bands: [2, 1, 0] + exclude_by_center: true + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + skip_unknown_categories: true + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 4 + num_workers: 32 + default_config: + transforms: + - class_path: rslp.transforms.mask.Mask + - class_path: rslearn.train.transforms.concatenate.Concatenate + init_args: + selections: + image: [] + output_selector: sentinel2_l2a + - class_path: rslp.helios.norm.HeliosNormalize + init_args: + config_fname: "/opt/helios/data/norm_configs/computed.json" + band_names: + sentinel2_l2a: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + train_config: + patch_size: 128 + tags: + split: train + nonempty: "yes" + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 32768 + val_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" + test_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0] + unfreeze_at_epoch: 30 +rslp_project: 2025_05_23_helios_finetuning +rslp_experiment: placeholder diff --git a/data/helios/satlas_marine_infra_128/random.yaml b/data/helios/satlas_marine_infra_128/random.yaml new file mode 100644 index 00000000..db8db3ef --- /dev/null +++ b/data/helios/satlas_marine_infra_128/random.yaml @@ -0,0 +1,156 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslp.helios.model.Helios + init_args: + checkpoint_path: "{CHECKPOINT_PATH}" + selector: ["encoder"] + forward_kwargs: + patch_size: {PATCH_SIZE} + random_initialization: true + decoders: + detect: + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: {ENCODER_EMBEDDING_SIZE} + out_channels: 192 + kernel_size: 3 + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: 192 + out_channels: 192 + kernel_size: 3 + activation: + class_path: torch.nn.LayerNorm + init_args: + normalized_shape: [192, {128/PATCH_SIZE}, {128/PATCH_SIZE}] + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: 192 + out_channels: 192 + kernel_size: 3 + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: 192 + out_channels: 192 + kernel_size: 3 + activation: + class_path: torch.nn.Identity + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [{PATCH_SIZE}] + num_channels: 192 + num_classes: 3 + anchor_sizes: [[32]] + lr: 0.0001 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 0 + plateau_cooldown: 10 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/marine_infra/dataset_v1/20241210/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: FLOAT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslp.satlas.train.MarineInfraTask + init_args: + property_name: "category" + classes: ["unknown", "platform", "turbine"] + box_size: 15 + remap_values: [[0, 0.25], [0, 255]] + image_bands: [2, 1, 0] + exclude_by_center: true + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + skip_unknown_categories: true + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 4 + num_workers: 32 + default_config: + transforms: + - class_path: rslp.transforms.mask.Mask + - class_path: rslearn.train.transforms.concatenate.Concatenate + init_args: + selections: + image: [] + output_selector: sentinel2_l2a + - class_path: rslp.helios.norm.HeliosNormalize + init_args: + config_fname: "/opt/helios/data/norm_configs/computed.json" + band_names: + sentinel2_l2a: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + train_config: + patch_size: 128 + tags: + split: train + nonempty: "yes" + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 32768 + val_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" + test_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max +rslp_project: 2025_05_23_helios_finetuning +rslp_experiment: placeholder diff --git a/data/helios/satlas_marine_infra_128/tmpdebug.yaml b/data/helios/satlas_marine_infra_128/tmpdebug.yaml new file mode 100644 index 00000000..3ca6b28f --- /dev/null +++ b/data/helios/satlas_marine_infra_128/tmpdebug.yaml @@ -0,0 +1,159 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslp.helios.model.Helios + init_args: + checkpoint_path: "/weka/dfive-default/helios/checkpoints/favyen/20250520-wattn-train-02/step87500" + selector: ["encoder"] + forward_kwargs: + patch_size: 8 + decoders: + detect: + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: 768 + out_channels: 192 + kernel_size: 3 + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: 192 + out_channels: 192 + kernel_size: 3 + activation: + class_path: torch.nn.LayerNorm + init_args: + normalized_shape: [192, 16, 16] + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: 192 + out_channels: 192 + kernel_size: 3 + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: 192 + out_channels: 192 + kernel_size: 3 + activation: + class_path: torch.nn.Identity + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [8] + num_channels: 192 + num_classes: 3 + anchor_sizes: [[32]] + lr: 0.0001 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 0 + plateau_cooldown: 10 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/marine_infra/dataset_v1/20241210/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: FLOAT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslp.satlas.train.MarineInfraTask + init_args: + property_name: "category" + classes: ["unknown", "platform", "turbine"] + box_size: 15 + remap_values: [[0, 0.25], [0, 255]] + image_bands: [2, 1, 0] + exclude_by_center: true + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + skip_unknown_categories: true + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 4 + num_workers: 32 + default_config: + transforms: + - class_path: rslp.transforms.mask.Mask + - class_path: rslearn.train.transforms.concatenate.Concatenate + init_args: + selections: + image: [] + output_selector: sentinel2_l2a + - class_path: rslp.helios.norm.HeliosNormalize + init_args: + config_fname: "/opt/helios/data/norm_configs/computed.json" + band_names: + sentinel2_l2a: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + train_config: + patch_size: 128 + tags: + split: train + nonempty: "yes" + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 32768 + val_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" + test_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0] + unfreeze_at_epoch: 2 +rslp_project: 2025_05_23_helios_finetuning +rslp_experiment: debugdebug_20250527_00 diff --git a/data/helios/satlas_marine_infra_ts_128/baseline_imagenet_swinb.yaml b/data/helios/satlas_marine_infra_ts_128/baseline_imagenet_swinb.yaml new file mode 100644 index 00000000..449d9286 --- /dev/null +++ b/data/helios/satlas_marine_infra_ts_128/baseline_imagenet_swinb.yaml @@ -0,0 +1,152 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslearn.models.simple_time_series.SimpleTimeSeries + init_args: + encoder: + class_path: rslearn.models.swin.Swin + init_args: + pretrained: true + input_channels: 9 + output_layers: [1, 3, 5, 7] + image_channels: 9 + - class_path: rslearn.models.fpn.Fpn + init_args: + in_channels: [128, 256, 512, 1024] + out_channels: 128 + decoders: + detect: + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [4, 8, 16, 32] + num_channels: 128 + num_classes: 3 + anchor_sizes: [[32], [64], [128], [256]] + lr: 0.0001 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 0 + plateau_cooldown: 10 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/marine_infra/dataset_v1/20241210/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B04", "B03", "B02", "B05", "B06", "B07", "B08", "B11", "B12"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: FLOAT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslp.satlas.train.MarineInfraTask + init_args: + property_name: "category" + classes: ["unknown", "platform", "turbine"] + box_size: 15 + remap_values: [[0, 0.25], [0, 255]] + image_bands: [2, 1, 0] + exclude_by_center: true + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + skip_unknown_categories: true + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 4 + num_workers: 32 + default_config: + transforms: + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 3000 + valid_range: [0, 1] + bands: [0, 1, 2] + selectors: ["image1", "image2", "image3", "image4"] + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 8160 + valid_range: [0, 1] + bands: [3, 4, 5, 6, 7, 8] + selectors: ["image1", "image2", "image3", "image4"] + - class_path: rslearn.train.transforms.concatenate.Concatenate + init_args: + selections: + image1: [] + image2: [] + image3: [] + image4: [] + output_selector: image + - class_path: rslp.transforms.mask.Mask + train_config: + patch_size: 128 + tags: + split: train + nonempty: "yes" + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 32768 + val_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" + test_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0] + unfreeze_at_epoch: 2 +rslp_project: 2025_05_29_helios_finetuning +rslp_experiment: 20250529_satlas_marine_infra_ts_128_imagenet_swinb_03 diff --git a/data/helios/satlas_marine_infra_ts_128/baseline_random_swinb.yaml b/data/helios/satlas_marine_infra_ts_128/baseline_random_swinb.yaml new file mode 100644 index 00000000..ac919586 --- /dev/null +++ b/data/helios/satlas_marine_infra_ts_128/baseline_random_swinb.yaml @@ -0,0 +1,152 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslearn.models.simple_time_series.SimpleTimeSeries + init_args: + encoder: + class_path: rslearn.models.swin.Swin + init_args: + pretrained: true + input_channels: 9 + output_layers: [1, 3, 5, 7] + image_channels: 9 + - class_path: rslearn.models.fpn.Fpn + init_args: + in_channels: [128, 256, 512, 1024] + out_channels: 128 + decoders: + detect: + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [4, 8, 16, 32] + num_channels: 128 + num_classes: 3 + anchor_sizes: [[32], [64], [128], [256]] + lr: 0.0001 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 0 + plateau_cooldown: 10 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/marine_infra/dataset_v1/20241210/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B04", "B03", "B02", "B05", "B06", "B07", "B08", "B11", "B12"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: FLOAT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslp.satlas.train.MarineInfraTask + init_args: + property_name: "category" + classes: ["unknown", "platform", "turbine"] + box_size: 15 + remap_values: [[0, 0.25], [0, 255]] + image_bands: [2, 1, 0] + exclude_by_center: true + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + skip_unknown_categories: true + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 4 + num_workers: 32 + default_config: + transforms: + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 3000 + valid_range: [0, 1] + bands: [0, 1, 2] + selectors: ["image1", "image2", "image3", "image4"] + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 8160 + valid_range: [0, 1] + bands: [3, 4, 5, 6, 7, 8] + selectors: ["image1", "image2", "image3", "image4"] + - class_path: rslearn.train.transforms.concatenate.Concatenate + init_args: + selections: + image1: [] + image2: [] + image3: [] + image4: [] + output_selector: image + - class_path: rslp.transforms.mask.Mask + train_config: + patch_size: 128 + tags: + split: train + nonempty: "yes" + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 32768 + val_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" + test_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0] + unfreeze_at_epoch: 2 +rslp_project: 2025_05_29_helios_finetuning +rslp_experiment: 20250529_satlas_marine_infra_ts_128_random_swinb_03 diff --git a/data/helios/satlas_marine_infra_ts_128/baseline_satlaspretrain_swinb.yaml b/data/helios/satlas_marine_infra_ts_128/baseline_satlaspretrain_swinb.yaml new file mode 100644 index 00000000..08d3868a --- /dev/null +++ b/data/helios/satlas_marine_infra_ts_128/baseline_satlaspretrain_swinb.yaml @@ -0,0 +1,174 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslearn.models.simple_time_series.SimpleTimeSeries + init_args: + encoder: + class_path: rslearn.models.swin.Swin + init_args: + pretrained: true + input_channels: 9 + output_layers: [1, 3, 5, 7] + image_channels: 9 + - class_path: rslearn.models.fpn.Fpn + init_args: + in_channels: [128, 256, 512, 1024] + out_channels: 128 + decoders: + detect: + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [4, 8, 16, 32] + num_channels: 128 + num_classes: 3 + anchor_sizes: [[32], [64], [128], [256]] + lr: 0.0001 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 0 + plateau_cooldown: 10 + restore_config: + restore_path: https://ai2-public-datasets.s3.amazonaws.com/satlas/satlas-model-v1-lowres-band-multi.pth + remap_prefixes: + - ["backbone.backbone.backbone.", "encoder.0.encoder.model."] +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/marine_infra/dataset_v1/20241210/ + inputs: + image1: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B04", "B03", "B02", "B05", "B06", "B07", "B08", "B11", "B12"] + passthrough: true + dtype: FLOAT32 + image2: + data_type: "raster" + layers: ["sentinel2.1"] + bands: ["B04", "B03", "B02", "B05", "B06", "B07", "B08", "B11", "B12"] + passthrough: true + dtype: FLOAT32 + image3: + data_type: "raster" + layers: ["sentinel2.2"] + bands: ["B04", "B03", "B02", "B05", "B06", "B07", "B08", "B11", "B12"] + passthrough: true + dtype: FLOAT32 + image4: + data_type: "raster" + layers: ["sentinel2.3"] + bands: ["B04", "B03", "B02", "B05", "B06", "B07", "B08", "B11", "B12"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: FLOAT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslp.satlas.train.MarineInfraTask + init_args: + property_name: "category" + classes: ["unknown", "platform", "turbine"] + box_size: 15 + remap_values: [[0, 0.25], [0, 255]] + image_bands: [2, 1, 0] + exclude_by_center: true + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + skip_unknown_categories: true + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 4 + num_workers: 32 + default_config: + transforms: + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 3000 + valid_range: [0, 1] + bands: [0, 1, 2] + selectors: ["image1", "image2", "image3", "image4"] + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 8160 + valid_range: [0, 1] + bands: [3, 4, 5, 6, 7, 8] + selectors: ["image1", "image2", "image3", "image4"] + - class_path: rslearn.train.transforms.concatenate.Concatenate + init_args: + selections: + image1: [] + image2: [] + image3: [] + image4: [] + output_selector: image + - class_path: rslp.transforms.mask.Mask + train_config: + patch_size: 128 + tags: + split: train + nonempty: "yes" + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 32768 + val_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" + test_config: + patch_size: 128 + load_all_patches: true + tags: + split: val + nonempty: "yes" +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0] + unfreeze_at_epoch: 2 +rslp_project: 2025_05_29_helios_finetuning +rslp_experiment: 20250529_satlas_marine_infra_ts_128_satlaspretrain_swinb_03 diff --git a/data/helios/sentinel1_vessels_128/baseline_imagenet_swinb.yaml b/data/helios/sentinel1_vessels_128/baseline_imagenet_swinb.yaml new file mode 100644 index 00000000..141c017b --- /dev/null +++ b/data/helios/sentinel1_vessels_128/baseline_imagenet_swinb.yaml @@ -0,0 +1,137 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslearn.models.swin.Swin + init_args: + pretrained: true + input_channels: 2 + output_layers: [1, 3, 5, 7] + - class_path: rslearn.models.fpn.Fpn + init_args: + in_channels: [128, 256, 512, 1024] + out_channels: 128 + decoders: + detect: + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [4, 8, 16, 32] + num_channels: 128 + num_classes: 2 + anchor_sizes: [[32], [64], [128], [256]] + lr: 0.0005 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 1e-6 + plateau_cooldown: 20 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/sentinel1_vessels/dataset_v1/20250602/ + inputs: + image: + data_type: "raster" + layers: ["sentinel1"] + bands: ["vv", "vh"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: INT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslearn.train.tasks.detection.DetectionTask + init_args: + property_name: "category" + classes: ["unknown", "vessel"] + box_size: 15 + remap_values: [[0, 1], [0, 255]] + image_bands: [1, 1, 1] + exclude_by_center: true + score_threshold: 0.5 + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 8 + num_workers: 32 + default_config: + transforms: + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 250 + valid_range: [0, 4] + - class_path: rslp.transforms.mask.Mask + train_config: + patch_size: 128 + transforms: + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 250 + valid_range: [0, 4] + - class_path: rslp.transforms.mask.Mask + - class_path: rslearn.train.transforms.flip.Flip + init_args: + image_selectors: ["image"] + box_selectors: ["target/detect"] + groups: + - train_ascending + - train_descending + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 32768 + val_config: + load_all_patches: true + patch_size: 128 + groups: + - val_ascending + - val_descending + test_config: + load_all_patches: true + patch_size: 128 + groups: + - val_ascending + - val_descending +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0, "model"] + unfreeze_at_epoch: 4 +rslp_project: 2025_05_29_helios_finetuning +rslp_experiment: 20250529_sentinel1_vessels_128_imagenet_swinb_00 diff --git a/data/helios/sentinel1_vessels_128/baseline_random_swinb.yaml b/data/helios/sentinel1_vessels_128/baseline_random_swinb.yaml new file mode 100644 index 00000000..2d3e6bb4 --- /dev/null +++ b/data/helios/sentinel1_vessels_128/baseline_random_swinb.yaml @@ -0,0 +1,137 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslearn.models.swin.Swin + init_args: + pretrained: false + input_channels: 2 + output_layers: [1, 3, 5, 7] + - class_path: rslearn.models.fpn.Fpn + init_args: + in_channels: [128, 256, 512, 1024] + out_channels: 128 + decoders: + detect: + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [4, 8, 16, 32] + num_channels: 128 + num_classes: 2 + anchor_sizes: [[32], [64], [128], [256]] + lr: 0.0005 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 1e-6 + plateau_cooldown: 20 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/sentinel1_vessels/dataset_v1/20250602/ + inputs: + image: + data_type: "raster" + layers: ["sentinel1"] + bands: ["vv", "vh"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: INT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslearn.train.tasks.detection.DetectionTask + init_args: + property_name: "category" + classes: ["unknown", "vessel"] + box_size: 15 + remap_values: [[0, 1], [0, 255]] + image_bands: [1, 1, 1] + exclude_by_center: true + score_threshold: 0.5 + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 8 + num_workers: 32 + default_config: + transforms: + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 250 + valid_range: [0, 4] + - class_path: rslp.transforms.mask.Mask + train_config: + patch_size: 128 + transforms: + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 250 + valid_range: [0, 4] + - class_path: rslp.transforms.mask.Mask + - class_path: rslearn.train.transforms.flip.Flip + init_args: + image_selectors: ["image"] + box_selectors: ["target/detect"] + groups: + - train_ascending + - train_descending + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 32768 + val_config: + load_all_patches: true + patch_size: 128 + groups: + - val_ascending + - val_descending + test_config: + load_all_patches: true + patch_size: 128 + groups: + - val_ascending + - val_descending +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0, "model"] + unfreeze_at_epoch: 4 +rslp_project: 2025_05_29_helios_finetuning +rslp_experiment: 20250529_sentinel1_vessels_128_random_swinb_00 diff --git a/data/helios/sentinel1_vessels_128/baseline_satlaspretrain_swinb.yaml b/data/helios/sentinel1_vessels_128/baseline_satlaspretrain_swinb.yaml new file mode 100644 index 00000000..f10d47dc --- /dev/null +++ b/data/helios/sentinel1_vessels_128/baseline_satlaspretrain_swinb.yaml @@ -0,0 +1,147 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslearn.models.satlaspretrain.SatlasPretrain + init_args: + model_identifier: Sentinel1_SwinB_MI + - class_path: rslearn.models.fpn.Fpn + init_args: + in_channels: [128, 256, 512, 1024] + out_channels: 128 + decoders: + detect: + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [4, 8, 16, 32] + num_channels: 128 + num_classes: 2 + anchor_sizes: [[32], [64], [128], [256]] + lr: 0.0005 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 1e-6 + plateau_cooldown: 20 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/sentinel1_vessels/dataset_v1/20250602/ + inputs: + image_0: + data_type: "raster" + layers: ["sentinel1"] + bands: ["vv", "vh"] + passthrough: true + dtype: FLOAT32 + image_1: + data_type: "raster" + layers: ["sentinel1_historical"] + bands: ["vv", "vh"] + passthrough: true + dtype: FLOAT32 + image_2: + data_type: "raster" + layers: ["sentinel1_historical.1"] + bands: ["vv", "vh"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: INT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslearn.train.tasks.detection.DetectionTask + init_args: + property_name: "category" + classes: ["unknown", "vessel"] + box_size: 15 + remap_values: [[0, 1], [0, 255]] + image_bands: [1, 1, 1] + exclude_by_center: true + score_threshold: 0.5 + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 8 + num_workers: 32 + default_config: + transforms: + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 250 + valid_range: [0, 4] + - class_path: rslp.transforms.mask.Mask + train_config: + patch_size: 128 + transforms: + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 250 + valid_range: [0, 4] + - class_path: rslp.transforms.mask.Mask + - class_path: rslearn.train.transforms.flip.Flip + init_args: + image_selectors: ["image"] + box_selectors: ["target/detect"] + groups: + - train_ascending + - train_descending + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 32768 + val_config: + load_all_patches: true + patch_size: 128 + groups: + - val_ascending + - val_descending + test_config: + load_all_patches: true + patch_size: 128 + groups: + - val_ascending + - val_descending +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0, "model"] + unfreeze_at_epoch: 4 +rslp_project: 2025_05_29_helios_finetuning +rslp_experiment: 20250529_sentinel1_vessels_128_satlaspretrain_swinb_00 diff --git a/data/helios/sentinel1_vessels_128/finetune_direct2_longfreeze_lowlr.yaml b/data/helios/sentinel1_vessels_128/finetune_direct2_longfreeze_lowlr.yaml new file mode 100644 index 00000000..aac33f65 --- /dev/null +++ b/data/helios/sentinel1_vessels_128/finetune_direct2_longfreeze_lowlr.yaml @@ -0,0 +1,144 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslp.helios.model.Helios + init_args: + checkpoint_path: "{CHECKPOINT_PATH}" + selector: ["encoder"] + forward_kwargs: + patch_size: {PATCH_SIZE} + decoders: + detect: + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [{PATCH_SIZE}] + num_channels: {ENCODER_EMBEDDING_SIZE} + num_classes: 2 + anchor_sizes: [[32]] + lr: 0.0005 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 1e-6 + plateau_cooldown: 20 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/sentinel1_vessels/dataset_v1/20250602/ + inputs: + image: + data_type: "raster" + layers: ["sentinel1"] + bands: ["vv", "vh"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: INT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslearn.train.tasks.detection.DetectionTask + init_args: + property_name: "category" + classes: ["unknown", "vessel"] + box_size: 15 + remap_values: [[0, 1], [0, 255]] + image_bands: [1, 1, 1] + exclude_by_center: true + score_threshold: 0.5 + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 8 + num_workers: 32 + default_config: + transforms: + - class_path: rslp.transforms.mask.Mask + - class_path: rslearn.train.transforms.concatenate.Concatenate + init_args: + selections: + image: [] + output_selector: sentinel1 + - class_path: rslp.helios.norm.HeliosNormalize + init_args: + config_fname: "/opt/helios/data/norm_configs/computed.json" + band_names: + sentinel1: ["vv", "vh"] + train_config: + patch_size: 128 + transforms: + - class_path: rslp.transforms.mask.Mask + - class_path: rslearn.train.transforms.flip.Flip + init_args: + image_selectors: ["image"] + box_selectors: ["target/detect"] + - class_path: rslearn.train.transforms.concatenate.Concatenate + init_args: + selections: + image: [] + output_selector: sentinel1 + - class_path: rslp.helios.norm.HeliosNormalize + init_args: + config_fname: "/opt/helios/data/norm_configs/computed.json" + band_names: + sentinel1: ["vv", "vh"] + groups: + - train_ascending + - train_descending + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 32768 + val_config: + load_all_patches: true + patch_size: 128 + groups: + - val_ascending + - val_descending + test_config: + load_all_patches: true + patch_size: 128 + groups: + - val_ascending + - val_descending +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0, "model"] + unfreeze_at_epoch: 4 +rslp_project: 2025_05_29_helios_finetuning +rslp_experiment: placeholder diff --git a/data/helios/sentinel2_vessels_128/baseline_imagenet_swinb.yaml b/data/helios/sentinel2_vessels_128/baseline_imagenet_swinb.yaml new file mode 100644 index 00000000..6a0b50fd --- /dev/null +++ b/data/helios/sentinel2_vessels_128/baseline_imagenet_swinb.yaml @@ -0,0 +1,138 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslearn.models.swin.Swin + init_args: + pretrained: true + input_channels: 9 + output_layers: [1, 3, 5, 7] + - class_path: rslearn.models.fpn.Fpn + init_args: + in_channels: [128, 256, 512, 1024] + out_channels: 128 + decoders: + detect: + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [4, 8, 16, 32] + num_channels: 128 + num_classes: 3 + anchor_sizes: [[32], [64], [128], [256]] + lr: 0.0001 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 1e-6 + plateau_cooldown: 10 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/sentinel2_vessels/dataset_v1/20250213/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B04", "B03", "B02", "B05", "B06", "B07", "B08", "B11", "B12"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: INT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslearn.train.tasks.detection.DetectionTask + init_args: + property_name: "category" + classes: ["unknown", "vessel"] + box_size: 15 + remap_values: [[0, 1], [0, 255]] + exclude_by_center: true + score_threshold: 0.8 + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 8 + num_workers: 32 + default_config: + transforms: + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 3000 + valid_range: [0, 1] + bands: [0, 1, 2] + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 8160 + valid_range: [0, 1] + bands: [3, 4, 5, 6, 7, 8] + - class_path: rslp.transforms.mask.Mask + train_config: + patch_size: 128 + groups: ["sargassum_train", "split2", "split3", "split4", "split5", "split6", "train", "train-bg", "train2", "train3"] + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 131072 + val_config: + patch_size: 128 + load_all_patches: true + groups: ["sargassum_val", "split1", "split7"] + test_config: + patch_size: 128 + load_all_patches: true + groups: ["sargassum_val", "split1", "split7"] +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + merger: + class_path: rslp.utils.nms.NMSDistanceMerger + init_args: + grid_size: 64 + distance_threshold: 10 + property_name: "category" # same as task.property_name + class_agnostic: false + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0] + unfreeze_at_epoch: 5 +rslp_project: 2025_05_29_helios_finetuning +rslp_experiment: 20250523_sentinel2_vessels_128_baseline_imagenet_swinb_10 diff --git a/data/helios/sentinel2_vessels_128/baseline_random_swinb.yaml b/data/helios/sentinel2_vessels_128/baseline_random_swinb.yaml new file mode 100644 index 00000000..cd6b522a --- /dev/null +++ b/data/helios/sentinel2_vessels_128/baseline_random_swinb.yaml @@ -0,0 +1,134 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslearn.models.swin.Swin + init_args: + pretrained: false + input_channels: 9 + output_layers: [1, 3, 5, 7] + - class_path: rslearn.models.fpn.Fpn + init_args: + in_channels: [128, 256, 512, 1024] + out_channels: 128 + decoders: + detect: + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [4, 8, 16, 32] + num_channels: 128 + num_classes: 3 + anchor_sizes: [[32], [64], [128], [256]] + lr: 0.0001 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 1e-6 + plateau_cooldown: 10 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/sentinel2_vessels/dataset_v1/20250213/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B04", "B03", "B02", "B05", "B06", "B07", "B08", "B11", "B12"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: INT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslearn.train.tasks.detection.DetectionTask + init_args: + property_name: "category" + classes: ["unknown", "vessel"] + box_size: 15 + remap_values: [[0, 1], [0, 255]] + exclude_by_center: true + score_threshold: 0.8 + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 8 + num_workers: 32 + default_config: + transforms: + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 3000 + valid_range: [0, 1] + bands: [0, 1, 2] + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 8160 + valid_range: [0, 1] + bands: [3, 4, 5, 6, 7, 8] + - class_path: rslp.transforms.mask.Mask + train_config: + patch_size: 128 + groups: ["sargassum_train", "split2", "split3", "split4", "split5", "split6", "train", "train-bg", "train2", "train3"] + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 131072 + val_config: + patch_size: 128 + load_all_patches: true + groups: ["sargassum_val", "split1", "split7"] + test_config: + patch_size: 128 + load_all_patches: true + groups: ["sargassum_val", "split1", "split7"] +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + merger: + class_path: rslp.utils.nms.NMSDistanceMerger + init_args: + grid_size: 64 + distance_threshold: 10 + property_name: "category" # same as task.property_name + class_agnostic: false + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max +rslp_project: 2025_05_29_helios_finetuning +rslp_experiment: 20250523_sentinel2_vessels_128_baseline_random_swinb_10 diff --git a/data/helios/sentinel2_vessels_128/baseline_satlaspretrain_swinb.yaml b/data/helios/sentinel2_vessels_128/baseline_satlaspretrain_swinb.yaml new file mode 100644 index 00000000..4a4b89cb --- /dev/null +++ b/data/helios/sentinel2_vessels_128/baseline_satlaspretrain_swinb.yaml @@ -0,0 +1,142 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslearn.models.swin.Swin + init_args: + pretrained: true + input_channels: 9 + output_layers: [1, 3, 5, 7] + - class_path: rslearn.models.fpn.Fpn + init_args: + in_channels: [128, 256, 512, 1024] + out_channels: 128 + decoders: + detect: + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [4, 8, 16, 32] + num_channels: 128 + num_classes: 3 + anchor_sizes: [[32], [64], [128], [256]] + lr: 0.0001 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 1e-6 + plateau_cooldown: 10 + restore_config: + restore_path: https://ai2-public-datasets.s3.amazonaws.com/satlas/satlas-model-v1-lowres-band-multi.pth + remap_prefixes: + - ["backbone.backbone.backbone.", "encoder.0.model."] +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/sentinel2_vessels/dataset_v1/20250213/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B04", "B03", "B02", "B05", "B06", "B07", "B08", "B11", "B12"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: INT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslearn.train.tasks.detection.DetectionTask + init_args: + property_name: "category" + classes: ["unknown", "vessel"] + box_size: 15 + remap_values: [[0, 1], [0, 255]] + exclude_by_center: true + score_threshold: 0.8 + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 8 + num_workers: 32 + default_config: + transforms: + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 3000 + valid_range: [0, 1] + bands: [0, 1, 2] + - class_path: rslearn.train.transforms.normalize.Normalize + init_args: + mean: 0 + std: 8160 + valid_range: [0, 1] + bands: [3, 4, 5, 6, 7, 8] + - class_path: rslp.transforms.mask.Mask + train_config: + patch_size: 128 + groups: ["sargassum_train", "split2", "split3", "split4", "split5", "split6", "train", "train-bg", "train2", "train3"] + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 131072 + val_config: + patch_size: 128 + load_all_patches: true + groups: ["sargassum_val", "split1", "split7"] + test_config: + patch_size: 128 + load_all_patches: true + groups: ["sargassum_val", "split1", "split7"] +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + merger: + class_path: rslp.utils.nms.NMSDistanceMerger + init_args: + grid_size: 64 + distance_threshold: 10 + property_name: "category" # same as task.property_name + class_agnostic: false + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0] + unfreeze_at_epoch: 5 +rslp_project: 2025_05_29_helios_finetuning +rslp_experiment: 20250523_sentinel2_vessels_128_baseline_satlaspretrain_swinb_10 diff --git a/data/helios/sentinel2_vessels_128/finetune.yaml b/data/helios/sentinel2_vessels_128/finetune.yaml new file mode 100644 index 00000000..bbb40663 --- /dev/null +++ b/data/helios/sentinel2_vessels_128/finetune.yaml @@ -0,0 +1,159 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslp.helios.model.Helios + init_args: + checkpoint_path: "{CHECKPOINT_PATH}" + selector: ["encoder"] + forward_kwargs: + patch_size: {PATCH_SIZE} + decoders: + detect: + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: {ENCODER_EMBEDDING_SIZE} + out_channels: 192 + kernel_size: 3 + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: 192 + out_channels: 192 + kernel_size: 3 + activation: + class_path: torch.nn.LayerNorm + init_args: + normalized_shape: [192, {128/PATCH_SIZE}, {128/PATCH_SIZE}] + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: 192 + out_channels: 192 + kernel_size: 3 + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: 192 + out_channels: 192 + kernel_size: 3 + activation: + class_path: torch.nn.Identity + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [{PATCH_SIZE}] + num_channels: 192 + num_classes: 3 + anchor_sizes: [[32]] + lr: 0.0001 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 1e-6 + plateau_cooldown: 10 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/sentinel2_vessels/dataset_v1/20250213/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: INT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslearn.train.tasks.detection.DetectionTask + init_args: + property_name: "category" + classes: ["unknown", "vessel"] + box_size: 15 + remap_values: [[0, 1], [0, 255]] + exclude_by_center: true + score_threshold: 0.8 + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 8 + num_workers: 32 + default_config: + transforms: + - class_path: rslp.transforms.mask.Mask + - class_path: rslearn.train.transforms.concatenate.Concatenate + init_args: + selections: + image: [] + output_selector: sentinel2_l2a + - class_path: rslp.helios.norm.HeliosNormalize + init_args: + config_fname: "/opt/helios/data/norm_configs/computed.json" + band_names: + sentinel2_l2a: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + train_config: + patch_size: 128 + groups: ["sargassum_train", "split2", "split3", "split4", "split5", "split6", "train", "train-bg", "train2", "train3"] + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 131072 + val_config: + patch_size: 128 + load_all_patches: true + groups: ["sargassum_val", "split1", "split7"] + test_config: + patch_size: 128 + load_all_patches: true + groups: ["sargassum_val", "split1", "split7"] +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + merger: + class_path: rslp.utils.nms.NMSDistanceMerger + init_args: + grid_size: 64 + distance_threshold: 10 + property_name: "category" # same as task.property_name + class_agnostic: false + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0] + unfreeze_at_epoch: 2 +rslp_project: 2025_05_23_helios_finetuning +rslp_experiment: placeholder diff --git a/data/helios/sentinel2_vessels_128/finetune_direct1.yaml b/data/helios/sentinel2_vessels_128/finetune_direct1.yaml new file mode 100644 index 00000000..3f244962 --- /dev/null +++ b/data/helios/sentinel2_vessels_128/finetune_direct1.yaml @@ -0,0 +1,159 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslp.helios.model.Helios + init_args: + checkpoint_path: "{CHECKPOINT_PATH}" + selector: ["encoder"] + forward_kwargs: + patch_size: {PATCH_SIZE} + decoders: + detect: + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: {ENCODER_EMBEDDING_SIZE} + out_channels: {ENCODER_EMBEDDING_SIZE} + kernel_size: 3 + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: {ENCODER_EMBEDDING_SIZE} + out_channels: {ENCODER_EMBEDDING_SIZE} + kernel_size: 3 + activation: + class_path: torch.nn.LayerNorm + init_args: + normalized_shape: [{ENCODER_EMBEDDING_SIZE}, {128/PATCH_SIZE}, {128/PATCH_SIZE}] + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: {ENCODER_EMBEDDING_SIZE} + out_channels: {ENCODER_EMBEDDING_SIZE} + kernel_size: 3 + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: {ENCODER_EMBEDDING_SIZE} + out_channels: {ENCODER_EMBEDDING_SIZE} + kernel_size: 3 + activation: + class_path: torch.nn.Identity + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [{PATCH_SIZE}] + num_channels: {ENCODER_EMBEDDING_SIZE} + num_classes: 3 + anchor_sizes: [[32]] + lr: 0.0001 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 1e-6 + plateau_cooldown: 10 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/sentinel2_vessels/dataset_v1/20250213/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: INT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslearn.train.tasks.detection.DetectionTask + init_args: + property_name: "category" + classes: ["unknown", "vessel"] + box_size: 15 + remap_values: [[0, 1], [0, 255]] + exclude_by_center: true + score_threshold: 0.8 + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 8 + num_workers: 32 + default_config: + transforms: + - class_path: rslp.transforms.mask.Mask + - class_path: rslearn.train.transforms.concatenate.Concatenate + init_args: + selections: + image: [] + output_selector: sentinel2_l2a + - class_path: rslp.helios.norm.HeliosNormalize + init_args: + config_fname: "/opt/helios/data/norm_configs/computed.json" + band_names: + sentinel2_l2a: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + train_config: + patch_size: 128 + groups: ["sargassum_train", "split2", "split3", "split4", "split5", "split6", "train", "train-bg", "train2", "train3"] + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 131072 + val_config: + patch_size: 128 + load_all_patches: true + groups: ["sargassum_val", "split1", "split7"] + test_config: + patch_size: 128 + load_all_patches: true + groups: ["sargassum_val", "split1", "split7"] +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + merger: + class_path: rslp.utils.nms.NMSDistanceMerger + init_args: + grid_size: 64 + distance_threshold: 10 + property_name: "category" # same as task.property_name + class_agnostic: false + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0] + unfreeze_at_epoch: 2 +rslp_project: 2025_05_23_helios_finetuning +rslp_experiment: placeholder diff --git a/data/helios/sentinel2_vessels_128/finetune_direct2.yaml b/data/helios/sentinel2_vessels_128/finetune_direct2.yaml new file mode 100644 index 00000000..0b77141d --- /dev/null +++ b/data/helios/sentinel2_vessels_128/finetune_direct2.yaml @@ -0,0 +1,133 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslp.helios.model.Helios + init_args: + checkpoint_path: "{CHECKPOINT_PATH}" + selector: ["encoder"] + forward_kwargs: + patch_size: {PATCH_SIZE} + decoders: + detect: + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [{PATCH_SIZE}] + num_channels: {ENCODER_EMBEDDING_SIZE} + num_classes: 3 + anchor_sizes: [[32]] + lr: 0.0001 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 1e-6 + plateau_cooldown: 10 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/sentinel2_vessels/dataset_v1/20250213/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: INT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslearn.train.tasks.detection.DetectionTask + init_args: + property_name: "category" + classes: ["unknown", "vessel"] + box_size: 15 + remap_values: [[0, 1], [0, 255]] + exclude_by_center: true + score_threshold: 0.8 + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 8 + num_workers: 32 + default_config: + transforms: + - class_path: rslp.transforms.mask.Mask + - class_path: rslearn.train.transforms.concatenate.Concatenate + init_args: + selections: + image: [] + output_selector: sentinel2_l2a + - class_path: rslp.helios.norm.HeliosNormalize + init_args: + config_fname: "/opt/helios/data/norm_configs/computed.json" + band_names: + sentinel2_l2a: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + train_config: + patch_size: 128 + groups: ["sargassum_train", "split2", "split3", "split4", "split5", "split6", "train", "train-bg", "train2", "train3"] + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 131072 + val_config: + patch_size: 128 + load_all_patches: true + groups: ["sargassum_val", "split1", "split7"] + test_config: + patch_size: 128 + load_all_patches: true + groups: ["sargassum_val", "split1", "split7"] +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + merger: + class_path: rslp.utils.nms.NMSDistanceMerger + init_args: + grid_size: 64 + distance_threshold: 10 + property_name: "category" # same as task.property_name + class_agnostic: false + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0] + unfreeze_at_epoch: 2 +rslp_project: 2025_05_23_helios_finetuning +rslp_experiment: placeholder diff --git a/data/helios/sentinel2_vessels_128/finetune_direct2_frozen.yaml b/data/helios/sentinel2_vessels_128/finetune_direct2_frozen.yaml new file mode 100644 index 00000000..1c4f1371 --- /dev/null +++ b/data/helios/sentinel2_vessels_128/finetune_direct2_frozen.yaml @@ -0,0 +1,132 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslp.helios.model.Helios + init_args: + checkpoint_path: "{CHECKPOINT_PATH}" + selector: ["encoder"] + forward_kwargs: + patch_size: {PATCH_SIZE} + decoders: + detect: + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [{PATCH_SIZE}] + num_channels: {ENCODER_EMBEDDING_SIZE} + num_classes: 3 + anchor_sizes: [[32]] + lr: 0.0005 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 1e-6 + plateau_cooldown: 20 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/sentinel2_vessels/dataset_v1/20250213/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: INT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslearn.train.tasks.detection.DetectionTask + init_args: + property_name: "category" + classes: ["unknown", "vessel"] + box_size: 15 + remap_values: [[0, 1], [0, 255]] + exclude_by_center: true + score_threshold: 0.8 + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 8 + num_workers: 32 + default_config: + transforms: + - class_path: rslp.transforms.mask.Mask + - class_path: rslearn.train.transforms.concatenate.Concatenate + init_args: + selections: + image: [] + output_selector: sentinel2_l2a + - class_path: rslp.helios.norm.HeliosNormalize + init_args: + config_fname: "/opt/helios/data/norm_configs/computed.json" + band_names: + sentinel2_l2a: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + train_config: + patch_size: 128 + groups: ["sargassum_train", "split2", "split3", "split4", "split5", "split6", "train", "train-bg", "train2", "train3"] + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 131072 + val_config: + patch_size: 128 + load_all_patches: true + groups: ["sargassum_val", "split1", "split7"] + test_config: + patch_size: 128 + load_all_patches: true + groups: ["sargassum_val", "split1", "split7"] +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + merger: + class_path: rslp.utils.nms.NMSDistanceMerger + init_args: + grid_size: 64 + distance_threshold: 10 + property_name: "category" # same as task.property_name + class_agnostic: false + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0] +rslp_project: 2025_05_29_helios_finetuning +rslp_experiment: placeholder diff --git a/data/helios/sentinel2_vessels_128/finetune_direct2_longfreeze.yaml b/data/helios/sentinel2_vessels_128/finetune_direct2_longfreeze.yaml new file mode 100644 index 00000000..62d249d9 --- /dev/null +++ b/data/helios/sentinel2_vessels_128/finetune_direct2_longfreeze.yaml @@ -0,0 +1,133 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslp.helios.model.Helios + init_args: + checkpoint_path: "{CHECKPOINT_PATH}" + selector: ["encoder"] + forward_kwargs: + patch_size: {PATCH_SIZE} + decoders: + detect: + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [{PATCH_SIZE}] + num_channels: {ENCODER_EMBEDDING_SIZE} + num_classes: 3 + anchor_sizes: [[32]] + lr: 0.0005 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 1e-6 + plateau_cooldown: 10 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/sentinel2_vessels/dataset_v1/20250213/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: INT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslearn.train.tasks.detection.DetectionTask + init_args: + property_name: "category" + classes: ["unknown", "vessel"] + box_size: 15 + remap_values: [[0, 1], [0, 255]] + exclude_by_center: true + score_threshold: 0.8 + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 8 + num_workers: 32 + default_config: + transforms: + - class_path: rslp.transforms.mask.Mask + - class_path: rslearn.train.transforms.concatenate.Concatenate + init_args: + selections: + image: [] + output_selector: sentinel2_l2a + - class_path: rslp.helios.norm.HeliosNormalize + init_args: + config_fname: "/opt/helios/data/norm_configs/computed.json" + band_names: + sentinel2_l2a: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + train_config: + patch_size: 128 + groups: ["sargassum_train", "split2", "split3", "split4", "split5", "split6", "train", "train-bg", "train2", "train3"] + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 131072 + val_config: + patch_size: 128 + load_all_patches: true + groups: ["sargassum_val", "split1", "split7"] + test_config: + patch_size: 128 + load_all_patches: true + groups: ["sargassum_val", "split1", "split7"] +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + merger: + class_path: rslp.utils.nms.NMSDistanceMerger + init_args: + grid_size: 64 + distance_threshold: 10 + property_name: "category" # same as task.property_name + class_agnostic: false + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0] + unfreeze_at_epoch: 20 +rslp_project: 2025_05_23_helios_finetuning +rslp_experiment: placeholder diff --git a/data/helios/sentinel2_vessels_128/finetune_direct2_longfreeze_lowlr.yaml b/data/helios/sentinel2_vessels_128/finetune_direct2_longfreeze_lowlr.yaml new file mode 100644 index 00000000..c810081f --- /dev/null +++ b/data/helios/sentinel2_vessels_128/finetune_direct2_longfreeze_lowlr.yaml @@ -0,0 +1,134 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslp.helios.model.Helios + init_args: + checkpoint_path: "{CHECKPOINT_PATH}" + selector: ["encoder"] + forward_kwargs: + patch_size: {PATCH_SIZE} + decoders: + detect: + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [{PATCH_SIZE}] + num_channels: {ENCODER_EMBEDDING_SIZE} + num_classes: 3 + anchor_sizes: [[32]] + lr: 0.0005 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 1e-6 + plateau_cooldown: 20 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/sentinel2_vessels/dataset_v1/20250213/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: INT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslearn.train.tasks.detection.DetectionTask + init_args: + property_name: "category" + classes: ["unknown", "vessel"] + box_size: 15 + remap_values: [[0, 1], [0, 255]] + exclude_by_center: true + score_threshold: 0.8 + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 8 + num_workers: 32 + default_config: + transforms: + - class_path: rslp.transforms.mask.Mask + - class_path: rslearn.train.transforms.concatenate.Concatenate + init_args: + selections: + image: [] + output_selector: sentinel2_l2a + - class_path: rslp.helios.norm.HeliosNormalize + init_args: + config_fname: "/opt/helios/data/norm_configs/computed.json" + band_names: + sentinel2_l2a: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + train_config: + patch_size: 128 + groups: ["sargassum_train", "split2", "split3", "split4", "split5", "split6", "train", "train-bg", "train2", "train3"] + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 131072 + val_config: + patch_size: 128 + load_all_patches: true + groups: ["sargassum_val", "split1", "split7"] + test_config: + patch_size: 128 + load_all_patches: true + groups: ["sargassum_val", "split1", "split7"] +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + merger: + class_path: rslp.utils.nms.NMSDistanceMerger + init_args: + grid_size: 64 + distance_threshold: 10 + property_name: "category" # same as task.property_name + class_agnostic: false + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0] + unfreeze_at_epoch: 20 + unfreeze_lr_factor: 10 +rslp_project: 2025_05_29_helios_finetuning +rslp_experiment: placeholder diff --git a/data/helios/sentinel2_vessels_128/finetune_direct2_lowlr.yaml b/data/helios/sentinel2_vessels_128/finetune_direct2_lowlr.yaml new file mode 100644 index 00000000..a4981795 --- /dev/null +++ b/data/helios/sentinel2_vessels_128/finetune_direct2_lowlr.yaml @@ -0,0 +1,134 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslp.helios.model.Helios + init_args: + checkpoint_path: "{CHECKPOINT_PATH}" + selector: ["encoder"] + forward_kwargs: + patch_size: {PATCH_SIZE} + decoders: + detect: + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [{PATCH_SIZE}] + num_channels: {ENCODER_EMBEDDING_SIZE} + num_classes: 3 + anchor_sizes: [[32]] + lr: 0.0005 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 1e-6 + plateau_cooldown: 20 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/sentinel2_vessels/dataset_v1/20250213/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: INT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslearn.train.tasks.detection.DetectionTask + init_args: + property_name: "category" + classes: ["unknown", "vessel"] + box_size: 15 + remap_values: [[0, 1], [0, 255]] + exclude_by_center: true + score_threshold: 0.8 + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 8 + num_workers: 32 + default_config: + transforms: + - class_path: rslp.transforms.mask.Mask + - class_path: rslearn.train.transforms.concatenate.Concatenate + init_args: + selections: + image: [] + output_selector: sentinel2_l2a + - class_path: rslp.helios.norm.HeliosNormalize + init_args: + config_fname: "/opt/helios/data/norm_configs/computed.json" + band_names: + sentinel2_l2a: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + train_config: + patch_size: 128 + groups: ["sargassum_train", "split2", "split3", "split4", "split5", "split6", "train", "train-bg", "train2", "train3"] + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 131072 + val_config: + patch_size: 128 + load_all_patches: true + groups: ["sargassum_val", "split1", "split7"] + test_config: + patch_size: 128 + load_all_patches: true + groups: ["sargassum_val", "split1", "split7"] +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + merger: + class_path: rslp.utils.nms.NMSDistanceMerger + init_args: + grid_size: 64 + distance_threshold: 10 + property_name: "category" # same as task.property_name + class_agnostic: false + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0] + unfreeze_at_epoch: 0 + unfreeze_lr_factor: 10 +rslp_project: 2025_05_29_helios_finetuning +rslp_experiment: placeholder diff --git a/data/helios/sentinel2_vessels_128/finetune_direct2_unfrozen.yaml b/data/helios/sentinel2_vessels_128/finetune_direct2_unfrozen.yaml new file mode 100644 index 00000000..d1f78c2a --- /dev/null +++ b/data/helios/sentinel2_vessels_128/finetune_direct2_unfrozen.yaml @@ -0,0 +1,129 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslp.helios.model.Helios + init_args: + checkpoint_path: "{CHECKPOINT_PATH}" + selector: ["encoder"] + forward_kwargs: + patch_size: {PATCH_SIZE} + decoders: + detect: + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [{PATCH_SIZE}] + num_channels: {ENCODER_EMBEDDING_SIZE} + num_classes: 3 + anchor_sizes: [[32]] + lr: 0.0005 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 1e-6 + plateau_cooldown: 20 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/sentinel2_vessels/dataset_v1/20250213/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: INT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslearn.train.tasks.detection.DetectionTask + init_args: + property_name: "category" + classes: ["unknown", "vessel"] + box_size: 15 + remap_values: [[0, 1], [0, 255]] + exclude_by_center: true + score_threshold: 0.8 + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 8 + num_workers: 32 + default_config: + transforms: + - class_path: rslp.transforms.mask.Mask + - class_path: rslearn.train.transforms.concatenate.Concatenate + init_args: + selections: + image: [] + output_selector: sentinel2_l2a + - class_path: rslp.helios.norm.HeliosNormalize + init_args: + config_fname: "/opt/helios/data/norm_configs/computed.json" + band_names: + sentinel2_l2a: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + train_config: + patch_size: 128 + groups: ["sargassum_train", "split2", "split3", "split4", "split5", "split6", "train", "train-bg", "train2", "train3"] + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 131072 + val_config: + patch_size: 128 + load_all_patches: true + groups: ["sargassum_val", "split1", "split7"] + test_config: + patch_size: 128 + load_all_patches: true + groups: ["sargassum_val", "split1", "split7"] +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + merger: + class_path: rslp.utils.nms.NMSDistanceMerger + init_args: + grid_size: 64 + distance_threshold: 10 + property_name: "category" # same as task.property_name + class_agnostic: false + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max +rslp_project: 2025_05_29_helios_finetuning +rslp_experiment: placeholder diff --git a/data/helios/sentinel2_vessels_128/finetune_longfreeze.yaml b/data/helios/sentinel2_vessels_128/finetune_longfreeze.yaml new file mode 100644 index 00000000..0ad3fd58 --- /dev/null +++ b/data/helios/sentinel2_vessels_128/finetune_longfreeze.yaml @@ -0,0 +1,159 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslp.helios.model.Helios + init_args: + checkpoint_path: "{CHECKPOINT_PATH}" + selector: ["encoder"] + forward_kwargs: + patch_size: {PATCH_SIZE} + decoders: + detect: + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: {ENCODER_EMBEDDING_SIZE} + out_channels: 192 + kernel_size: 3 + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: 192 + out_channels: 192 + kernel_size: 3 + activation: + class_path: torch.nn.LayerNorm + init_args: + normalized_shape: [192, {128/PATCH_SIZE}, {128/PATCH_SIZE}] + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: 192 + out_channels: 192 + kernel_size: 3 + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: 192 + out_channels: 192 + kernel_size: 3 + activation: + class_path: torch.nn.Identity + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [{PATCH_SIZE}] + num_channels: 192 + num_classes: 3 + anchor_sizes: [[32]] + lr: 0.0005 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 1e-6 + plateau_cooldown: 10 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/sentinel2_vessels/dataset_v1/20250213/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: INT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslearn.train.tasks.detection.DetectionTask + init_args: + property_name: "category" + classes: ["unknown", "vessel"] + box_size: 15 + remap_values: [[0, 1], [0, 255]] + exclude_by_center: true + score_threshold: 0.8 + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 8 + num_workers: 32 + default_config: + transforms: + - class_path: rslp.transforms.mask.Mask + - class_path: rslearn.train.transforms.concatenate.Concatenate + init_args: + selections: + image: [] + output_selector: sentinel2_l2a + - class_path: rslp.helios.norm.HeliosNormalize + init_args: + config_fname: "/opt/helios/data/norm_configs/computed.json" + band_names: + sentinel2_l2a: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + train_config: + patch_size: 128 + groups: ["sargassum_train", "split2", "split3", "split4", "split5", "split6", "train", "train-bg", "train2", "train3"] + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 131072 + val_config: + patch_size: 128 + load_all_patches: true + groups: ["sargassum_val", "split1", "split7"] + test_config: + patch_size: 128 + load_all_patches: true + groups: ["sargassum_val", "split1", "split7"] +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + merger: + class_path: rslp.utils.nms.NMSDistanceMerger + init_args: + grid_size: 64 + distance_threshold: 10 + property_name: "category" # same as task.property_name + class_agnostic: false + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0] + unfreeze_at_epoch: 20 +rslp_project: 2025_05_23_helios_finetuning +rslp_experiment: placeholder diff --git a/data/helios/sentinel2_vessels_128/random.yaml b/data/helios/sentinel2_vessels_128/random.yaml new file mode 100644 index 00000000..2495c257 --- /dev/null +++ b/data/helios/sentinel2_vessels_128/random.yaml @@ -0,0 +1,160 @@ +model: + class_path: rslearn.train.lightning_module.RslearnLightningModule + init_args: + model: + class_path: rslearn.models.multitask.MultiTaskModel + init_args: + encoder: + - class_path: rslp.helios.model.Helios + init_args: + checkpoint_path: "{CHECKPOINT_PATH}" + selector: ["encoder"] + forward_kwargs: + patch_size: {PATCH_SIZE} + random_initialization: true + decoders: + detect: + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: {ENCODER_EMBEDDING_SIZE} + out_channels: 192 + kernel_size: 3 + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: 192 + out_channels: 192 + kernel_size: 3 + activation: + class_path: torch.nn.LayerNorm + init_args: + normalized_shape: [192, {128/PATCH_SIZE}, {128/PATCH_SIZE}] + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: 192 + out_channels: 192 + kernel_size: 3 + - class_path: rslearn.models.conv.Conv + init_args: + in_channels: 192 + out_channels: 192 + kernel_size: 3 + activation: + class_path: torch.nn.Identity + - class_path: rslearn.models.faster_rcnn.FasterRCNN + init_args: + downsample_factors: [{PATCH_SIZE}] + num_channels: 192 + num_classes: 3 + anchor_sizes: [[32]] + lr: 0.0001 + plateau: true + plateau_factor: 0.2 + plateau_patience: 2 + plateau_min_lr: 1e-6 + plateau_cooldown: 10 +data: + class_path: rslearn.train.data_module.RslearnDataModule + init_args: + path: /weka/dfive-default/rslearn-eai/datasets/sentinel2_vessels/dataset_v1/20250213/ + inputs: + image: + data_type: "raster" + layers: ["sentinel2"] + bands: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + passthrough: true + dtype: FLOAT32 + mask: + data_type: "raster" + layers: ["mask"] + bands: ["mask"] + passthrough: true + dtype: INT32 + is_target: true + targets: + data_type: "vector" + layers: ["label"] + is_target: true + task: + class_path: rslearn.train.tasks.multi_task.MultiTask + init_args: + tasks: + detect: + class_path: rslearn.train.tasks.detection.DetectionTask + init_args: + property_name: "category" + classes: ["unknown", "vessel"] + box_size: 15 + remap_values: [[0, 1], [0, 255]] + exclude_by_center: true + score_threshold: 0.8 + enable_map_metric: true + enable_f1_metric: true + f1_metric_thresholds: [[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95], [0.1], [0.2], [0.3], [0.4], [0.5], [0.6], [0.7], [0.8], [0.9]] + f1_metric_kwargs: + cmp_mode: "distance" + cmp_threshold: 15 + flatten_classes: true + input_mapping: + detect: + targets: "targets" + batch_size: 8 + num_workers: 32 + default_config: + transforms: + - class_path: rslp.transforms.mask.Mask + - class_path: rslearn.train.transforms.concatenate.Concatenate + init_args: + selections: + image: [] + output_selector: sentinel2_l2a + - class_path: rslp.helios.norm.HeliosNormalize + init_args: + config_fname: "/opt/helios/data/norm_configs/computed.json" + band_names: + sentinel2_l2a: ["B02", "B03", "B04", "B08", "B05", "B06", "B07", "B8A", "B11", "B12", "B01", "B09"] + train_config: + patch_size: 128 + groups: ["sargassum_train", "split2", "split3", "split4", "split5", "split6", "train", "train-bg", "train2", "train3"] + sampler: + class_path: rslearn.train.dataset.RandomSamplerFactory + init_args: + replacement: true + num_samples: 524288 + val_config: + patch_size: 128 + load_all_patches: true + groups: ["sargassum_val", "split1", "split7"] + test_config: + patch_size: 128 + load_all_patches: true + groups: ["sargassum_val", "split1", "split7"] +trainer: + max_epochs: 500 + callbacks: + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + init_args: + logging_interval: "epoch" + - class_path: rslearn.train.prediction_writer.RslearnWriter + init_args: + path: placeholder + output_layer: output + selector: ["detect"] + merger: + class_path: rslp.utils.nms.NMSDistanceMerger + init_args: + grid_size: 64 + distance_threshold: 10 + property_name: "category" # same as task.property_name + class_agnostic: false + - class_path: lightning.pytorch.callbacks.ModelCheckpoint + init_args: + save_top_k: 1 + save_last: true + monitor: val_detect/mAP + mode: max + - class_path: rslearn.train.callbacks.freeze_unfreeze.FreezeUnfreeze + init_args: + module_selector: ["model", "encoder", 0] + unfreeze_at_epoch: 2 +rslp_project: 2025_05_23_helios_finetuning +rslp_experiment: placeholder