|
dataset: |
|
use_epochs: false |
|
num_workers: 4 |
|
batch_size: ${experiment.batch_size_per_gpu} |
|
_target_: ocl.datasets.WebdatasetDataModule |
|
train_shards: ${oc.env:DATASET_PREFIX}/vg_disjoint_coco/train/shard-{000000..001217}.tar |
|
train_size: 118287 |
|
val_shards: ${oc.env:DATASET_PREFIX}/vg/val/shard-{000000..000037}.tar |
|
val_size: 5000 |
|
test_shards: ${oc.env:DATASET_PREFIX}/vg/test/shard-{000000..000037}.tar |
|
test_size: 40670 |
|
use_autopadding: true |
|
eval_transforms: |
|
03a_preprocessing: |
|
_target_: ocl.transforms.Map |
|
transform: |
|
_target_: torchvision.transforms.Compose |
|
transforms: |
|
- _target_: ocl.preprocessing.SelectConditioningInfoVG |
|
num_max_binds: ${experiment.num_slots} |
|
num_slots: ${experiment.num_slots} |
|
- _target_: ocl.preprocessing.CopyFields |
|
mapping: |
|
instance_mask: instance_mask_v2 |
|
fields: |
|
- image |
|
- instance_mask |
|
- instance_bbox |
|
- name |
|
- bbox_centroids |
|
- name_embedding |
|
- selected_indices |
|
- contrastive_loss_mask |
|
- all_bbox_centroids |
|
batch_transform: false |
|
03c_preprocessing: |
|
_target_: ocl.transforms.SimpleTransform |
|
transforms: |
|
image: |
|
_target_: torchvision.transforms.Compose |
|
transforms: |
|
- '${lambda_fn:''lambda image: image.copy()''}' |
|
- _target_: torchvision.transforms.v2.ToImage |
|
- _target_: torchvision.transforms.v2.ToDtype |
|
dtype: ${torch_dtype:float32} |
|
scale: true |
|
- _target_: torchvision.transforms.v2.Normalize |
|
mean: |
|
- 0.485 |
|
- 0.456 |
|
- 0.406 |
|
std: |
|
- 0.229 |
|
- 0.224 |
|
- 0.225 |
|
instance_mask: |
|
_target_: torchvision.transforms.Compose |
|
transforms: |
|
- _target_: ocl.preprocessing.IntegerToOneHotMask |
|
output_axis: -3 |
|
- _target_: ocl.preprocessing.AddEmptyMasksVG |
|
- _target_: ocl.preprocessing.DenseMaskToTensor |
|
instance_mask_v2: |
|
_target_: torchvision.transforms.Compose |
|
transforms: |
|
- _target_: ocl.preprocessing.IntegerToOneHotMask |
|
output_axis: -3 |
|
- _target_: ocl.preprocessing.AddEmptyMasksVG |
|
- _target_: ocl.preprocessing.DenseMaskToTensor |
|
batch_transform: false |
|
train_transforms: |
|
03a_preprocessing: |
|
_target_: ocl.transforms.Map |
|
transform: |
|
_target_: torchvision.transforms.Compose |
|
transforms: |
|
- _target_: ocl.preprocessing.SelectConditioningInfoVG |
|
num_max_binds: ${experiment.num_slots} |
|
num_slots: ${experiment.num_slots} |
|
- _target_: ocl.preprocessing.CopyFields |
|
mapping: |
|
instance_mask: instance_mask_v2 |
|
fields: |
|
- image |
|
- instance_mask |
|
- instance_bbox |
|
- name |
|
- bbox_centroids |
|
- name_embedding |
|
- selected_indices |
|
- contrastive_loss_mask |
|
batch_transform: false |
|
03b_preprocessing: |
|
_target_: ocl.transforms.SimpleTransform |
|
transforms: |
|
image: |
|
_target_: torchvision.transforms.Compose |
|
transforms: |
|
- '${lambda_fn:''lambda image: image.copy()''}' |
|
- _target_: torchvision.transforms.v2.ToImage |
|
- _target_: torchvision.transforms.v2.ToDtype |
|
dtype: ${torch_dtype:float32} |
|
scale: true |
|
- _target_: torchvision.transforms.v2.Normalize |
|
mean: |
|
- 0.485 |
|
- 0.456 |
|
- 0.406 |
|
std: |
|
- 0.229 |
|
- 0.224 |
|
- 0.225 |
|
name_embedding: |
|
_target_: torchvision.transforms.Compose |
|
transforms: |
|
- '${lambda_fn:''lambda name_embedding: name_embedding.copy()''}' |
|
- _target_: ocl.preprocessing.ToTensor |
|
bbox_centroids: |
|
_target_: torchvision.transforms.Compose |
|
transforms: |
|
- '${lambda_fn:''lambda bbox_centroids: bbox_centroids.copy()''}' |
|
- _target_: ocl.preprocessing.ToTensor |
|
all_bbox_centroids: |
|
_target_: torchvision.transforms.Compose |
|
transforms: |
|
- '${lambda_fn:''lambda all_bbox_centroids: all_bbox_centroids.copy()''}' |
|
- _target_: ocl.preprocessing.ToTensor |
|
selected_indices: |
|
_target_: torchvision.transforms.Compose |
|
transforms: |
|
- '${lambda_fn:''lambda selected_indices: selected_indices.copy()''}' |
|
- _target_: ocl.preprocessing.ToTensor |
|
contrastive_loss_mask: |
|
_target_: torchvision.transforms.Compose |
|
transforms: |
|
- '${lambda_fn:''lambda contrastive_loss_mask: contrastive_loss_mask.copy()''}' |
|
- _target_: ocl.preprocessing.ToTensor |
|
instance_mask: |
|
_target_: torchvision.transforms.Compose |
|
transforms: |
|
- _target_: ocl.preprocessing.IntegerToOneHotMask |
|
output_axis: -3 |
|
- _target_: ocl.preprocessing.AddEmptyMasksVG |
|
- _target_: ocl.preprocessing.DenseMaskToTensor |
|
instance_mask_v2: |
|
_target_: torchvision.transforms.Compose |
|
transforms: |
|
- _target_: ocl.preprocessing.IntegerToOneHotMask |
|
output_axis: -3 |
|
- _target_: ocl.preprocessing.AddEmptyMasksVG |
|
- _target_: ocl.preprocessing.DenseMaskToTensor |
|
batch_transform: false |
|
models: |
|
feature_extractor: |
|
_target_: routed.ocl.feature_extractors.TimmFeatureExtractor |
|
model_name: ${experiment.timm_model} |
|
pretrained: ${when_testing:false,true} |
|
freeze: true |
|
feature_level: 12 |
|
video_path: input.image |
|
dynamic_img_size: true |
|
mapping: |
|
_target_: routed.ocl.mapping.MLPMapping |
|
dim: ${experiment.feature_dim} |
|
x_path: feature_extractor |
|
conditioning: |
|
_target_: routed.ocl.conditioning.LangConditioning |
|
n_slots: ${experiment.num_slots} |
|
object_dim: ${experiment.slot_dim} |
|
dual_conditioning: false |
|
name_embedding_path: input.name_embedding |
|
batch_size_path: input.batch_size |
|
mask_path: input.contrastive_loss_mask |
|
perceptual_grouping: |
|
_target_: routed.ocl.perceptual_grouping.SlotAttentionGrouping |
|
feature_dim: ${.object_dim} |
|
object_dim: ${experiment.slot_dim} |
|
use_projection_bias: false |
|
positional_embedding: |
|
_target_: ocl.neural_networks.wrappers.Sequential |
|
_args_: |
|
- _target_: ocl.neural_networks.positional_embedding.DummyPositionEmbed |
|
- _target_: ocl.neural_networks.build_two_layer_mlp |
|
input_dim: ${experiment.feature_dim} |
|
output_dim: ${....feature_dim} |
|
hidden_dim: '${mul: ${experiment.feature_dim}, 2}' |
|
initial_layer_norm: true |
|
ff_mlp: |
|
_target_: ocl.neural_networks.build_two_layer_mlp |
|
input_dim: ${..object_dim} |
|
output_dim: ${..object_dim} |
|
hidden_dim: '${mul: ${..object_dim}, 4}' |
|
initial_layer_norm: true |
|
residual: true |
|
feature_path: mapping |
|
conditioning_path: conditioning |
|
attn_aggregation: |
|
_target_: routed.ocl.heads.PatchClipAttentionAggregationHead |
|
dim: ${experiment.feature_dim} |
|
attn_path: perceptual_grouping.feature_attributions |
|
x_path: input.image |
|
projector_slots: |
|
_target_: routed.ocl.heads.SlotProjectorHead |
|
dim: 512 |
|
embedding_dim: 512 |
|
slots_path: attn_aggregation |
|
dual_embedding: |
|
_target_: routed.ocl.heads.CLIPLangEmbeddingHead |
|
embedding_dim: 512 |
|
names_batch_path: input.name |
|
dec_conditioning: |
|
_target_: routed.ocl.decoder_conditioning.EncodeLangConditioning |
|
dim: ${experiment.slot_dim} |
|
language_path: input.name_embedding |
|
mask_path: input.contrastive_loss_mask |
|
object_decoder: |
|
_target_: routed.ocl.decoding.PatchDecoder |
|
decoder: |
|
_target_: ocl.neural_networks.build_mlp |
|
_partial_: true |
|
features: |
|
- 2048 |
|
- 2048 |
|
- 2048 |
|
object_dim: ${experiment.slot_dim} |
|
output_dim: ${experiment.feature_dim} |
|
num_patches: ${experiment.num_patches} |
|
object_features_path: perceptual_grouping.objects |
|
image_path: input.image |
|
conditioned: true |
|
condition_info_path: dec_conditioning |
|
optimizers: |
|
opt0: |
|
_target_: ocl.optimization.OptimizationWrapper |
|
optimizer: |
|
_target_: torch.optim.AdamW |
|
_partial_: true |
|
lr: ${experiment.total_lr} |
|
lr_scheduler: |
|
_target_: ocl.scheduling.exponential_decay_after_optional_warmup |
|
_partial_: true |
|
decay_rate: 0.5 |
|
decay_steps: 100000 |
|
warmup_steps: 10000 |
|
parameter_groups: |
|
_target_: ocl.optimization.ParameterGroupCreator |
|
param_groups: |
|
grouping: |
|
params: |
|
- models.perceptual_grouping |
|
- models.conditioning |
|
- models.object_decoder |
|
- models.dec_conditioning |
|
lr: ${experiment.total_lr} |
|
weight_decay: 0.0 |
|
encoder: |
|
params: |
|
- models.mapping |
|
- models.projector_slots |
|
lr: ${experiment.mapping_lr} |
|
weight_decay: 0.0 |
|
losses: |
|
mse: |
|
_target_: routed.ocl.losses.ReconstructionLoss |
|
loss_type: mse |
|
input_path: object_decoder.reconstruction |
|
target_path: feature_extractor.features |
|
contrastive_loss: |
|
_target_: routed.ocl.losses.DiagonalContrastiveLoss |
|
x1_path: projector_slots |
|
x2_path: dual_embedding |
|
contrastive_loss_mask_path: input.contrastive_loss_mask |
|
temp: 0.1 |
|
batch_contrastive: true |
|
weight: 0.2 |
|
visualizations: |
|
input: |
|
_target_: routed.ocl.visualizations.Image |
|
n_instances: 32 |
|
denormalization: |
|
_target_: ocl.preprocessing.Denormalize |
|
mean: |
|
- 0.485 |
|
- 0.456 |
|
- 0.406 |
|
std: |
|
- 0.229 |
|
- 0.224 |
|
- 0.225 |
|
image_path: input.image |
|
masks: |
|
_target_: routed.ocl.visualizations.Mask |
|
mask_path: object_decoder.masks_as_image |
|
pred_segmentation: |
|
_target_: routed.ocl.visualizations.Segmentation |
|
denormalization: |
|
_target_: ocl.preprocessing.Denormalize |
|
mean: |
|
- 0.485 |
|
- 0.456 |
|
- 0.406 |
|
std: |
|
- 0.229 |
|
- 0.224 |
|
- 0.225 |
|
image_path: input.image |
|
mask_path: object_decoder.masks_as_image |
|
pred_segmentation_with_text: |
|
_target_: routed.ocl.visualizations.SegmentationWithText |
|
n_instances: 32 |
|
denormalization: |
|
_target_: ocl.preprocessing.Denormalize |
|
mean: |
|
- 0.485 |
|
- 0.456 |
|
- 0.406 |
|
std: |
|
- 0.229 |
|
- 0.224 |
|
- 0.225 |
|
image_path: input.image |
|
mask_path: object_decoder.masks_as_image |
|
gt_masks_path: input.instance_mask_v2 |
|
selected_indices_path: input.selected_indices |
|
text_path: input.name |
|
bbox_centroids_path: input.all_bbox_centroids |
|
trainer: |
|
_target_: pytorch_lightning.trainer.trainer.Trainer |
|
accelerator: auto |
|
strategy: auto |
|
devices: 1 |
|
num_nodes: 1 |
|
precision: null |
|
logger: |
|
- _target_: pytorch_lightning.loggers.TensorBoardLogger |
|
save_dir: . |
|
name: tb |
|
version: '' |
|
- _target_: pytorch_lightning.loggers.WandbLogger |
|
project: ${slice:${hydra:runtime.choices.experiment},"/", 1}_${slice:${hydra:runtime.choices.experiment},"/", |
|
2} |
|
name: ${slice:${hydra:runtime.choices.experiment},"/","3:"} |
|
log_model: false |
|
callbacks: ${oc.dict.values:experiment.callbacks} |
|
fast_dev_run: false |
|
max_epochs: -1 |
|
min_epochs: null |
|
max_steps: 100000 |
|
min_steps: null |
|
max_time: null |
|
limit_train_batches: null |
|
limit_val_batches: null |
|
limit_test_batches: null |
|
limit_predict_batches: null |
|
overfit_batches: 0.0 |
|
val_check_interval: 5000 |
|
check_val_every_n_epoch: null |
|
num_sanity_val_steps: null |
|
log_every_n_steps: 100 |
|
enable_checkpointing: null |
|
enable_progress_bar: null |
|
enable_model_summary: null |
|
accumulate_grad_batches: 1 |
|
gradient_clip_val: 1.0 |
|
gradient_clip_algorithm: null |
|
deterministic: null |
|
benchmark: null |
|
inference_mode: true |
|
use_distributed_sampler: true |
|
profiler: null |
|
detect_anomaly: false |
|
barebones: false |
|
plugins: null |
|
sync_batchnorm: false |
|
reload_dataloaders_every_n_epochs: 0 |
|
default_root_dir: . |
|
training_vis_frequency: 10000 |
|
training_metrics: |
|
acc_sc: |
|
_target_: routed.ocl.metrics.acc.EmbAccMetric |
|
mode: sc |
|
slot_emb_path: projector_slots |
|
ctrl_emb_path: dual_embedding |
|
mask_idx_path: input.contrastive_loss_mask |
|
acc_cs: |
|
_target_: routed.ocl.metrics.acc.EmbAccMetric |
|
mode: cs |
|
slot_emb_path: projector_slots |
|
ctrl_emb_path: dual_embedding |
|
mask_idx_path: input.contrastive_loss_mask |
|
acc_avg: |
|
_target_: routed.ocl.metrics.acc.EmbAccMetric |
|
mode: average |
|
slot_emb_path: projector_slots |
|
ctrl_emb_path: dual_embedding |
|
mask_idx_path: input.contrastive_loss_mask |
|
evaluation_metrics: |
|
binding_hits: |
|
_target_: routed.ocl.metrics.BindingHits |
|
prediction_path: object_decoder.masks_as_image |
|
target_path: input.instance_mask_v2 |
|
selected_indices_path: input.selected_indices |
|
use_threshold: false |
|
matching: best_overlap |
|
ignore_overlaps: false |
|
instance_ari: |
|
_target_: routed.ocl.metrics.ARIMetric |
|
prediction_path: object_decoder.masks_as_image |
|
target_path: input.instance_mask_v2 |
|
foreground: false |
|
convert_target_one_hot: true |
|
ignore_overlaps: true |
|
instance_mbo: |
|
_target_: routed.ocl.metrics.UnsupervisedMaskIoUMetric |
|
prediction_path: object_decoder.masks_as_image |
|
target_path: input.instance_mask |
|
use_threshold: false |
|
matching: best_overlap |
|
ignore_overlaps: true |
|
gt_matched_instance_mbo: |
|
_target_: routed.ocl.metrics.UnsupervisedMaskIoUMetric |
|
prediction_path: object_decoder.masks_as_image |
|
target_path: input.instance_mask_v2 |
|
selected_indices_path: input.selected_indices |
|
use_threshold: false |
|
matching: best_overlap |
|
ignore_overlaps: true |
|
acc_sc: |
|
_target_: routed.ocl.metrics.acc.EmbAccMetric |
|
mode: sc |
|
slot_emb_path: projector_slots |
|
ctrl_emb_path: dual_embedding |
|
mask_idx_path: input.contrastive_loss_mask |
|
acc_cs: |
|
_target_: routed.ocl.metrics.acc.EmbAccMetric |
|
mode: cs |
|
slot_emb_path: projector_slots |
|
ctrl_emb_path: dual_embedding |
|
mask_idx_path: input.contrastive_loss_mask |
|
acc_avg: |
|
_target_: routed.ocl.metrics.acc.EmbAccMetric |
|
mode: average |
|
slot_emb_path: projector_slots |
|
ctrl_emb_path: dual_embedding |
|
mask_idx_path: input.contrastive_loss_mask |
|
load_checkpoint: null |
|
load_checkpoint_partial: null |
|
modules_to_load: null |
|
trainable_models: null |
|
seed: null |
|
experiment: |
|
callbacks: {} |
|
checkpoint_every_n_steps: 1000 |
|
image_size: 224 |
|
mask_size: ${.image_size} |
|
batch_size_per_gpu: 64 |
|
base_learning_rate: 0.0004 |
|
max_num_binds: 7 |
|
slot_dim: 256 |
|
num_slots: 7 |
|
timm_model: vit_small_patch14_dinov2.lvd142m |
|
feature_dim: '${timm_model_dim: ${.timm_model}}' |
|
num_patches: '${timm_model_num_patches: ${.timm_model}, ${.image_size}}' |
|
num_patches_per_side: '${isqrt: ${.num_patches}}' |
|
patch_size: '${timm_model_patch_size: ${.timm_model}}' |
|
total_batch_size: '${mul: ${trainer.devices}, ${.batch_size_per_gpu}}' |
|
total_lr: 0.0004 |
|
mapping_lr: '${mul: 0.05, ${.total_lr}}' |
|
|