From cace0c63872baf806aa003a5444be451544b120f Mon Sep 17 00:00:00 2001 From: Anke Tang Date: Sun, 5 Jan 2025 22:25:10 +0800 Subject: [PATCH 1/4] modified: fusion_bench/method/__init__.py --- fusion_bench/method/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fusion_bench/method/__init__.py b/fusion_bench/method/__init__.py index de77bd72..2f7a64be 100644 --- a/fusion_bench/method/__init__.py +++ b/fusion_bench/method/__init__.py @@ -27,6 +27,7 @@ "TaskArithmeticForLlama", "LinearInterpolationAlgorithm", ], + "slerp": ["SlerpMergeAlgorithm"], "simple_average": ["SimpleAverageAlgorithm"], "weighted_average": ["WeightedAverageAlgorithm", "WeightedAverageForLLama"], "task_arithmetic": ["TaskArithmeticAlgorithm"], @@ -140,6 +141,7 @@ from .rankone_moe import CLIPRankOneMoEAlgorithm, RankOneMoEAlgorithm from .regmean import RegMeanAlgorithmForCLIP, RegMeanAlgorithmForGPT2 from .simple_average import SimpleAverageAlgorithm + from .slerp import SlerpMergeAlgorithm from .smile_upscaling import ( SingularProjectionMergingAlgorithm, SmileUpscalingAlgorithm, From 3d8c91f14f4f9e5131626549b5a4ff04a5b2e3bf Mon Sep 17 00:00:00 2001 From: Anke Tang Date: Mon, 6 Jan 2025 09:18:36 +0800 Subject: [PATCH 2/4] Add args and kwargs to evaluate_merged_model --- fusion_bench/programs/fabric_fusion_program.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/fusion_bench/programs/fabric_fusion_program.py b/fusion_bench/programs/fabric_fusion_program.py index fe57acdb..5acf16a0 100644 --- a/fusion_bench/programs/fabric_fusion_program.py +++ b/fusion_bench/programs/fabric_fusion_program.py @@ -159,7 +159,11 @@ def save_merged_model(self, merged_model): print("No save path specified for the merged model. Skipping saving.") def evaluate_merged_model( - self, taskpool: BaseTaskPool, merged_model: Union[nn.Module, Dict, Iterable] + self, + taskpool: BaseTaskPool, + merged_model: Union[nn.Module, Dict, Iterable], + *args, + **kwargs, ): """ Evaluates the merged model using the provided task pool. @@ -174,6 +178,8 @@ def evaluate_merged_model( Args: taskpool: The task pool used for evaluating the merged model. merged_model: The merged model to be evaluated. It can be an instance of `nn.Module`, a dictionary, or an iterable. + *args: Additional positional arguments to be passed to the `evaluate` method of the taskpool. + **kwargs: Additional keyword arguments to be passed to the `evaluate` method of the taskpool. Returns: The evaluation report. The type of the report depends on the type of the merged model: @@ -182,20 +188,20 @@ def evaluate_merged_model( - If the merged model is an iterable, the report is a list of evaluation reports. """ if isinstance(merged_model, nn.Module): - report = taskpool.evaluate(merged_model) + report = taskpool.evaluate(merged_model, *args, **kwargs) return report elif isinstance(merged_model, Dict): report = {} for key, item in merged_model.items(): if isinstance(item, nn.Module): - report[key] = taskpool.evaluate(item) + report[key] = taskpool.evaluate(item, *args, **kwargs) else: # metadata report[key] = item return report elif isinstance(merged_model, Iterable): return [ - self.evaluate_merged_model(taskpool, m) + self.evaluate_merged_model(taskpool, m, *args, **kwargs) for m in tqdm(merged_model, desc="Evaluating models") ] else: From fb88674983d816019d544a49a454ff9170808b8e Mon Sep 17 00:00:00 2001 From: Anke Tang Date: Thu, 9 Jan 2025 17:52:48 +0800 Subject: [PATCH 3/4] add Method/opcm (#64) * experimental implementation of sequential merging * add new tasks, add svd projection method * add more tasks for clip-vit-base-patch32 * add more tasks * add more tasks * add more models * add more model configurations * add single task evaluation configurations * update svd projection * update * update * Update fusion_bench/scripts/cli.py * update modelpool.py * simplify model config for CLIPVisionModelPool * add config/model/clip-vit/README.md * add docstring * update utils * update * add continual task arithmetic * add OPCM for continual model merging --- .../clip_continual_finetune.yaml | 28 + .../method/classification/clip_finetune.yaml | 26 + config/method/clip_finetune.yaml | 4 +- config/method/opcm/opcm.yaml | 12 + config/method/opcm/task_arithmetic.yaml | 12 + config/method/opcm/ties_merging.yaml | 18 + config/method/opcm/weight_average.yaml | 10 + ...t-base-patch32_two_tasks_control_task.yaml | 18 + docs/README.md | 4 +- examples/clip_finetune/.gitignore | 1 + examples/clip_finetune/clip_finetune.sh | 104 +- examples/clip_finetune/clip_finetune_B16.sh | 81 + examples/clip_finetune/clip_finetune_L14.sh | 77 + .../config/modelpool/clip-finetune_TA8.yaml | 16 + .../modelpool/clip-finetune_TALL14.yaml | 16 + .../modelpool/clip-finetune_TALL20.yaml | 16 + .../modelpool/clip-finetune_cifar10.yaml | 18 + .../modelpool/clip-finetune_cifar100.yaml | 18 + .../clip-finetune_emnist_letters.yaml | 18 + .../clip-finetune_fashion_mnist.yaml | 18 + .../modelpool/clip-finetune_fer2013.yaml | 17 + .../modelpool/clip-finetune_food101.yaml | 18 + .../modelpool/clip-finetune_kmnist.yaml | 18 + .../clip-finetune_oxford-iiit-pet.yaml | 18 + .../clip-finetune_oxford_flowers102.yaml | 18 + .../config/modelpool/clip-finetune_pcam.yaml | 18 + .../clip-finetune_rendered-sst2.yaml | 18 + .../config/modelpool/clip-finetune_stl10.yaml | 18 + .../clip-vit-classification_cifar10.yaml | 31 + .../clip-vit-classification_cifar100.yaml | 31 + ...lip-vit-classification_emnist_letters.yaml | 31 + ...clip-vit-classification_fashion_mnist.yaml | 31 + .../clip-vit-classification_fer2013.yaml | 30 + .../clip-vit-classification_food101.yaml | 31 + .../clip-vit-classification_kmnist.yaml | 31 + ...ip-vit-classification_oxford-iiit-pet.yaml | 31 + ...-vit-classification_oxford_flowers102.yaml | 31 + ...-classification_oxford_flowers102_val.yaml | 31 + .../clip-vit-classification_pcam.yaml | 31 + ...clip-vit-classification_rendered-sst2.yaml | 31 + .../clip-vit-classification_stl10.yaml | 31 + examples/clip_finetune/convert_ckpt.ipynb | 68 + .../evaluate_single_task/vit-b-16/evaluate.sh | 17 + .../evaluate_single_task/vit-b-32/evaluate.sh | 14 + .../evaluate_single_task/vit-b-32/fer2013.sh | 12 + .../evaluate_single_task/vit-b-32/food101.sh | 12 + .../evaluate_single_task/vit-b-32/kmnist.sh | 12 + .../vit-b-32/oxford-iiit-pet.sh | 12 + .../vit-b-32/oxford_flowers102.sh | 25 + .../evaluate_single_task/vit-b-32/pcam.sh | 12 + .../vit-b-32/rendered-sst2.sh | 12 + .../evaluate_single_task/vit-l-14/evaluate.sh | 17 + examples/opcm/.gitignore | 1 + examples/opcm/clip_evaluate_single_task.sh | 87 + .../clip_gather_single_model_report.ipynb | 1194 ++++++++++++ examples/opcm/clip_vit_exp.sh | 1099 +++++++++++ examples/opcm/plot_utils.py | 80 + examples/opcm/results/vit-b-16.csv | 3 + examples/opcm/results/vit-b-32.csv | 3 + examples/opcm/results/vit-l-14.csv | 3 + examples/run_model_combinations.py | 54 + fusion_bench/__main__.py | 4 + fusion_bench/method/__init__.py | 12 +- .../method/classification/__init__.py | 1 + .../method/classification/clip_finetune.py | 4 +- .../classification/continual_clip_finetune.py | 297 +++ fusion_bench/method/opcm/__init__.py | 4 + fusion_bench/method/opcm/opcm.py | 277 +++ fusion_bench/method/opcm/task_arithmetic.py | 115 ++ fusion_bench/method/opcm/ties_merging.py | 156 ++ fusion_bench/method/opcm/utils.py | 73 + fusion_bench/method/opcm/weight_average.py | 120 ++ .../method/ties_merging/ties_merging.py | 10 + .../continual_learning/backward_transfer.py | 22 + fusion_bench/mixins/clip_classification.py | 5 +- .../programs/fabric_fusion_program.py | 19 +- fusion_bench/scripts/cli.py | 1 + fusion_bench/taskpool/clip_vision/taskpool.py | 19 +- fusion_bench/utils/__init__.py | 3 +- fusion_bench/utils/dict.py | 43 + fusion_bench/utils/expr.py | 90 + fusion_bench/utils/fabric.py | 17 + fusion_bench/utils/instantiate.py | 8 +- fusion_bench/utils/json.py | 30 + fusion_bench/utils/parameters.py | 1 + fusion_bench/utils/path.py | 15 + fusion_bench/utils/plot/color_data.py | 1726 +++++++++++++++++ fusion_bench/utils/rich_utils.py | 15 + fusion_bench/utils/set.py | 8 + fusion_bench/utils/tensorboard.py | 51 + 90 files changed, 6886 insertions(+), 57 deletions(-) create mode 100644 config/method/classification/clip_continual_finetune.yaml create mode 100644 config/method/classification/clip_finetune.yaml create mode 100644 config/method/opcm/opcm.yaml create mode 100644 config/method/opcm/task_arithmetic.yaml create mode 100644 config/method/opcm/ties_merging.yaml create mode 100644 config/method/opcm/weight_average.yaml create mode 100644 config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_two_tasks_control_task.yaml create mode 100644 examples/clip_finetune/.gitignore create mode 100755 examples/clip_finetune/clip_finetune_B16.sh create mode 100755 examples/clip_finetune/clip_finetune_L14.sh create mode 100644 examples/clip_finetune/config/modelpool/clip-finetune_TA8.yaml create mode 100644 examples/clip_finetune/config/modelpool/clip-finetune_TALL14.yaml create mode 100644 examples/clip_finetune/config/modelpool/clip-finetune_TALL20.yaml create mode 100644 examples/clip_finetune/config/modelpool/clip-finetune_cifar10.yaml create mode 100644 examples/clip_finetune/config/modelpool/clip-finetune_cifar100.yaml create mode 100644 examples/clip_finetune/config/modelpool/clip-finetune_emnist_letters.yaml create mode 100644 examples/clip_finetune/config/modelpool/clip-finetune_fashion_mnist.yaml create mode 100644 examples/clip_finetune/config/modelpool/clip-finetune_fer2013.yaml create mode 100644 examples/clip_finetune/config/modelpool/clip-finetune_food101.yaml create mode 100644 examples/clip_finetune/config/modelpool/clip-finetune_kmnist.yaml create mode 100644 examples/clip_finetune/config/modelpool/clip-finetune_oxford-iiit-pet.yaml create mode 100644 examples/clip_finetune/config/modelpool/clip-finetune_oxford_flowers102.yaml create mode 100644 examples/clip_finetune/config/modelpool/clip-finetune_pcam.yaml create mode 100644 examples/clip_finetune/config/modelpool/clip-finetune_rendered-sst2.yaml create mode 100644 examples/clip_finetune/config/modelpool/clip-finetune_stl10.yaml create mode 100644 examples/clip_finetune/config/taskpool/clip-vit-classification_cifar10.yaml create mode 100644 examples/clip_finetune/config/taskpool/clip-vit-classification_cifar100.yaml create mode 100644 examples/clip_finetune/config/taskpool/clip-vit-classification_emnist_letters.yaml create mode 100644 examples/clip_finetune/config/taskpool/clip-vit-classification_fashion_mnist.yaml create mode 100644 examples/clip_finetune/config/taskpool/clip-vit-classification_fer2013.yaml create mode 100644 examples/clip_finetune/config/taskpool/clip-vit-classification_food101.yaml create mode 100644 examples/clip_finetune/config/taskpool/clip-vit-classification_kmnist.yaml create mode 100644 examples/clip_finetune/config/taskpool/clip-vit-classification_oxford-iiit-pet.yaml create mode 100644 examples/clip_finetune/config/taskpool/clip-vit-classification_oxford_flowers102.yaml create mode 100644 examples/clip_finetune/config/taskpool/clip-vit-classification_oxford_flowers102_val.yaml create mode 100644 examples/clip_finetune/config/taskpool/clip-vit-classification_pcam.yaml create mode 100644 examples/clip_finetune/config/taskpool/clip-vit-classification_rendered-sst2.yaml create mode 100644 examples/clip_finetune/config/taskpool/clip-vit-classification_stl10.yaml create mode 100644 examples/clip_finetune/convert_ckpt.ipynb create mode 100644 examples/clip_finetune/scripts/evaluate_single_task/vit-b-16/evaluate.sh create mode 100644 examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/evaluate.sh create mode 100644 examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/fer2013.sh create mode 100644 examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/food101.sh create mode 100644 examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/kmnist.sh create mode 100644 examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/oxford-iiit-pet.sh create mode 100644 examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/oxford_flowers102.sh create mode 100644 examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/pcam.sh create mode 100644 examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/rendered-sst2.sh create mode 100644 examples/clip_finetune/scripts/evaluate_single_task/vit-l-14/evaluate.sh create mode 100644 examples/opcm/.gitignore create mode 100644 examples/opcm/clip_evaluate_single_task.sh create mode 100644 examples/opcm/clip_gather_single_model_report.ipynb create mode 100644 examples/opcm/clip_vit_exp.sh create mode 100644 examples/opcm/plot_utils.py create mode 100644 examples/opcm/results/vit-b-16.csv create mode 100644 examples/opcm/results/vit-b-32.csv create mode 100644 examples/opcm/results/vit-l-14.csv create mode 100644 examples/run_model_combinations.py create mode 100644 fusion_bench/__main__.py create mode 100644 fusion_bench/method/classification/continual_clip_finetune.py create mode 100644 fusion_bench/method/opcm/__init__.py create mode 100644 fusion_bench/method/opcm/opcm.py create mode 100644 fusion_bench/method/opcm/task_arithmetic.py create mode 100644 fusion_bench/method/opcm/ties_merging.py create mode 100644 fusion_bench/method/opcm/utils.py create mode 100644 fusion_bench/method/opcm/weight_average.py create mode 100644 fusion_bench/metrics/continual_learning/backward_transfer.py create mode 100644 fusion_bench/utils/dict.py create mode 100644 fusion_bench/utils/expr.py create mode 100644 fusion_bench/utils/fabric.py create mode 100644 fusion_bench/utils/plot/color_data.py create mode 100644 fusion_bench/utils/set.py create mode 100644 fusion_bench/utils/tensorboard.py diff --git a/config/method/classification/clip_continual_finetune.yaml b/config/method/classification/clip_continual_finetune.yaml new file mode 100644 index 00000000..fb8366f0 --- /dev/null +++ b/config/method/classification/clip_continual_finetune.yaml @@ -0,0 +1,28 @@ +_target_: fusion_bench.method.ContinualImageClassificationFineTuningForCLIP + +seed: 42 +# shuffle the order of the tasks +shuffle_order: true +learning_rate: 1e-5 +weight_decay: 0 +# number of training steps on each task +num_steps: 4000 +batch_size: 128 +num_workers: 16 +save_interval: 500 +# if `state_dict_load_path` is not null, the training will be resumed from the state_dict_path +state_dict_load_path: null +# if `state_dict_save_path` is not null, the state_dict will be saved to the path after training +state_dict_save_path: null +# if `skip_training` is true, use with `state_dict_load_path` to skip training and only evaluate +skip_training: false +# === LoRA === +use_lora: false +lora_config: + r: 16 + lora_alpha: 32 + target_modules: + - q_proj + - v_proj + lora_dropout: 0.1 + bias: none diff --git a/config/method/classification/clip_finetune.yaml b/config/method/classification/clip_finetune.yaml new file mode 100644 index 00000000..346ff69d --- /dev/null +++ b/config/method/classification/clip_finetune.yaml @@ -0,0 +1,26 @@ +name: clip_finetune +seed: 42 +learning_rate: 1e-5 +weight_decay: 0 +num_steps: 4000 +batch_size: 128 +num_workers: 16 +save_interval: 500 +# if `state_dict_load_path` is not null, the training will be resumed from the state_dict_path +state_dict_load_path: null +# if `state_dict_save_path` is not null, the state_dict will be saved to the path after training +state_dict_save_path: null +# if `skip_training` is true, use with `state_dict_load_path` to skip training and only evaluate +skip_training: false +# === LoRA === +use_lora: false +lora_config: + r: 16 + lora_alpha: 32 + target_modules: + - q_proj + - v_proj + lora_dropout: 0.1 + bias: none +# === L-LoRA === +use_l_lora: false diff --git a/config/method/clip_finetune.yaml b/config/method/clip_finetune.yaml index c1fd4fd6..346ff69d 100644 --- a/config/method/clip_finetune.yaml +++ b/config/method/clip_finetune.yaml @@ -3,8 +3,8 @@ seed: 42 learning_rate: 1e-5 weight_decay: 0 num_steps: 4000 -batch_size: 64 -num_workers: 8 +batch_size: 128 +num_workers: 16 save_interval: 500 # if `state_dict_load_path` is not null, the training will be resumed from the state_dict_path state_dict_load_path: null diff --git a/config/method/opcm/opcm.yaml b/config/method/opcm/opcm.yaml new file mode 100644 index 00000000..6f6b5e8f --- /dev/null +++ b/config/method/opcm/opcm.yaml @@ -0,0 +1,12 @@ +_target_: fusion_bench.method.opcm.opcm.OPCMForCLIP + +# shuffle the order of the models +shuffle_order: true +# the scaling factor for the SVD projection +alpha: 0.5 +# the random seed to use +seed: null +# save the merged model on every step +save_on_every_step: true +# evaluate the merged model on every step +evaluate_on_every_step: true diff --git a/config/method/opcm/task_arithmetic.yaml b/config/method/opcm/task_arithmetic.yaml new file mode 100644 index 00000000..c9d7f460 --- /dev/null +++ b/config/method/opcm/task_arithmetic.yaml @@ -0,0 +1,12 @@ +_target_: fusion_bench.method.opcm.task_arithmetic.ContinualTaskArithmeticForCLIP + +scaling_factor: 0.3 + +# shuffle the order of the models +shuffle_order: true +# the random seed to use +seed: null +# save the merged model on every step +save_on_every_step: true +# evaluate the merged model on every step +evaluate_on_every_step: true diff --git a/config/method/opcm/ties_merging.yaml b/config/method/opcm/ties_merging.yaml new file mode 100644 index 00000000..879eefb0 --- /dev/null +++ b/config/method/opcm/ties_merging.yaml @@ -0,0 +1,18 @@ +_target_: fusion_bench.method.opcm.ties_merging.ContinualTiesMergingForCLIP + +# Scaling factor $\lambda$ +scaling_factor: 0.5 +threshold: 20 +# List of keys to remove from the state dict, default is empty +remove_keys: [] +# Function to merge the models, default is sum. Options are 'sum', 'mean', and 'max' +merge_func: sum + +# shuffle the order of the models +shuffle_order: true +# the random seed to use +seed: null +# save the merged model on every step +save_on_every_step: true +# evaluate the merged model on every step +evaluate_on_every_step: true diff --git a/config/method/opcm/weight_average.yaml b/config/method/opcm/weight_average.yaml new file mode 100644 index 00000000..814ba01f --- /dev/null +++ b/config/method/opcm/weight_average.yaml @@ -0,0 +1,10 @@ +_target_: fusion_bench.method.opcm.weight_average.ContinualWeightAverageForCLIP + +# shuffle the order of the models +shuffle_order: true +# the random seed to use +seed: null +# save the merged model on every step +save_on_every_step: true +# evaluate the merged model on every step +evaluate_on_every_step: true diff --git a/config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_two_tasks_control_task.yaml b/config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_two_tasks_control_task.yaml new file mode 100644 index 00000000..69b3cfa8 --- /dev/null +++ b/config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_two_tasks_control_task.yaml @@ -0,0 +1,18 @@ +defaults: + - _self_ + - /dataset/image_classification/train@train_datasets: + - tiny-imagenet + +_target_: fusion_bench.modelpool.CLIPVisionModelPool +_recursive_: false + +models: + _pretrained_: openai/clip-vit-base-patch32 + model_1: tanganke/clip-vit-base-patch32_sun397 + model_2: tanganke/clip-vit-base-patch32_stanford-cars + +train_datasets: ??? + +processor: + _target_: transformers.CLIPProcessor.from_pretrained + pretrained_model_name_or_path: openai/clip-vit-base-patch32 diff --git a/docs/README.md b/docs/README.md index 7c8fe209..b4878102 100644 --- a/docs/README.md +++ b/docs/README.md @@ -172,7 +172,7 @@ fusion_bench \ # (2) method=simple_averaging \ # (3) - modelpool=clip-vit-base-patch32_robustness_corrupted \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_robustness_corrupted \ # (4) taskpool=clip-vit-base-patch32_robustness_corrupted ``` @@ -184,7 +184,7 @@ fusion_bench \ 2. The `method` option specifies the fusion algorithm to be used. In this case, we use the simple averaging algorithm. 3. Here we specify the model pool to be used. The model pool is responsible for managing the loading, preprocessing, and saving of the models. - By pass option `modelpool=clip-vit-base-patch32_robustness_corrupted`, the program instantiate a modelpool object that manages 4 task-specific CLIP-ViT-B/32 models that are fine-tuned on Stanford Cars, EuroSAT, RESISC45, and GTSRB datasets. + By pass option `modelpool=CLIPVisionModelPool/clip-vit-base-patch32_robustness_corrupted`, the program instantiate a modelpool object that manages 4 task-specific CLIP-ViT-B/32 models that are fine-tuned on Stanford Cars, EuroSAT, RESISC45, and GTSRB datasets. 4. Here we specify the task pool to be used. The task pool is responsible for managing the evaluation datasets and metrics. By pass option `taskpool=clip-vit-base-patch32_robustness_corrupted`, the program instantiate a taskpool object that manages 4 tasks with data corrupted by Gaussian noise. diff --git a/examples/clip_finetune/.gitignore b/examples/clip_finetune/.gitignore new file mode 100644 index 00000000..7d89d91d --- /dev/null +++ b/examples/clip_finetune/.gitignore @@ -0,0 +1 @@ +/tanganke/ \ No newline at end of file diff --git a/examples/clip_finetune/clip_finetune.sh b/examples/clip_finetune/clip_finetune.sh index 2e7e6e35..5fef0f0c 100755 --- a/examples/clip_finetune/clip_finetune.sh +++ b/examples/clip_finetune/clip_finetune.sh @@ -1,63 +1,105 @@ #!/bin/bash -SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd) # pre-trained model path -MODEL=/data0/users/tanganke/data/huggingface_models/openai/clip-vit-base-patch16 -MODEL_SHORT_NAME=ViT-B-16 +MODEL=openai/clip-vit-base-patch32 +MODEL_SHORT_NAME=ViT-B-32 # TASKS: sun397 stanford_cars resisc45 eurosat svhn gtsrb mnist dtd +TASK=kmnist # Full fine-tune CLIP-ViT-B/16: -function full_finetune(){ - for TASK in sun397 stanford_cars resisc45 eurosat svhn gtsrb mnist dtd; do +function full_finetune() { fusion_bench \ --config-dir ${SCRIPT_DIR}/config \ - method=clip_finetune \ - method.num_steps=2000 \ + method=classification/clip_finetune \ + method.num_steps=4000 \ method.learning_rate=1e-5 \ modelpool=clip-finetune_${TASK} \ - modelpool.models.0.path=${MODEL} \ - taskpool=clip-vit-classification_TA8 \ - taskpool.clip_model=${MODEL} \ + modelpool.base_model=${MODEL} \ fabric.loggers.root_dir=outputs/${MODEL_SHORT_NAME}/full_finetune \ - fabric.loggers.name=${TASK} \ - report_save_path=outputs/${MODEL_SHORT_NAME}/full_finetune_${TASK}.json - done + fabric.loggers.name=${TASK} } -function lora_finetune(){ - for TASK in sun397 stanford_cars resisc45 eurosat svhn gtsrb mnist dtd; do +function lora_finetune() { fusion_bench \ --config-dir ${SCRIPT_DIR}/config \ - method=clip_finetune \ - method.num_steps=2000 \ + method=classification/clip_finetune \ + method.num_steps=4000 \ method.learning_rate=1e-5 \ method.use_lora=true \ modelpool=clip-finetune_${TASK} \ modelpool.models.0.path=${MODEL} \ - taskpool=clip-vit-classification_TA8 \ - taskpool.clip_model=${MODEL} \ fabric.loggers.root_dir=outputs/${MODEL_SHORT_NAME}/lora_finetune \ - fabric.loggers.name=${TASK} \ - report_save_path=outputs/${MODEL_SHORT_NAME}/lora_finetune_${TASK}.json - done + fabric.loggers.name=${TASK} } -function l_lora_finetune(){ - for TASK in sun397 stanford_cars resisc45 eurosat svhn gtsrb mnist dtd; do +function l_lora_finetune() { fusion_bench \ --config-dir ${SCRIPT_DIR}/config \ - method=clip_finetune \ - method.num_steps=2000 \ + method=classification/clip_finetune \ + method.num_steps=4000 \ method.learning_rate=1e-5 \ method.use_lora=true \ method.use_l_lora=true \ modelpool=clip-finetune_${TASK} \ modelpool.models.0.path=${MODEL} \ - taskpool=clip-vit-classification_TA8 \ - taskpool.clip_model=${MODEL} \ fabric.loggers.root_dir=outputs/${MODEL_SHORT_NAME}/l_lora_finetune \ - fabric.loggers.name=${TASK} \ - report_save_path=outputs/${MODEL_SHORT_NAME}/l_lora_finetune_${TASK}.json - done + fabric.loggers.name=${TASK} } full_finetune + + +function continual_full_finetune_8_tasks() { + fusion_bench \ + --config-dir ${SCRIPT_DIR}/config \ + fabric.devices=4 \ + fabric.loggers.root_dir=outputs/${MODEL_SHORT_NAME}/continual_full_finetune \ + fabric.loggers.name=TA8 \ + method=classification/clip_continual_finetune \ + method.num_steps=4000 \ + method.batch_size=32 \ + method.save_interval=2000 \ + method.learning_rate=1e-5 \ + method.shuffle_order=true \ + modelpool=clip-finetune_TA8 \ + modelpool.base_model=${MODEL} +} + +function continual_full_finetune_14_tasks() { + fusion_bench \ + --config-dir ${SCRIPT_DIR}/config \ + fabric.devices=4 \ + fabric.loggers.root_dir=outputs/${MODEL_SHORT_NAME}/continual_full_finetune \ + fabric.loggers.name=TALL14 \ + method=classification/clip_continual_finetune \ + method.num_steps=4000 \ + method.batch_size=32 \ + method.save_interval=2000 \ + method.learning_rate=1e-5 \ + method.shuffle_order=true \ + modelpool=clip-finetune_TALL14 \ + modelpool.base_model=${MODEL} +} + + +function continual_full_finetune_20_tasks() { + fusion_bench \ + --config-dir ${SCRIPT_DIR}/config \ + fabric.devices=4 \ + fabric.loggers.root_dir=outputs/${MODEL_SHORT_NAME}/continual_full_finetune \ + fabric.loggers.name=TALL20 \ + method=classification/clip_continual_finetune \ + method.num_steps=4000 \ + method.batch_size=32 \ + method.save_interval=2000 \ + method.learning_rate=1e-5 \ + method.shuffle_order=true \ + modelpool=clip-finetune_TALL20 \ + modelpool.base_model=${MODEL} +} + +for version in 0 1 2 3 4 5 6 7 8 9; do + continual_full_finetune_8_tasks + continual_full_finetune_14_tasks + continual_full_finetune_20_tasks +done diff --git a/examples/clip_finetune/clip_finetune_B16.sh b/examples/clip_finetune/clip_finetune_B16.sh new file mode 100755 index 00000000..6830f1d5 --- /dev/null +++ b/examples/clip_finetune/clip_finetune_B16.sh @@ -0,0 +1,81 @@ +#!/bin/bash +SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd) +# pre-trained model path +MODEL=openai/clip-vit-base-patch16 +MODEL_SHORT_NAME=ViT-B-16 +# TASKS: sun397 stanford_cars resisc45 eurosat svhn gtsrb mnist dtd + +# Full fine-tune CLIP-ViT-B/16: +function full_finetune() { + fusion_bench \ + --config-dir ${SCRIPT_DIR}/config \ + fabric.devices=8 \ + method=classification/clip_finetune \ + method.num_steps=4000 \ + method.batch_size=16 \ + method.save_interval=2000 \ + method.learning_rate=1e-5 \ + modelpool=clip-finetune_${TASK} \ + modelpool.base_model=${MODEL} \ + fabric.loggers.root_dir=outputs/${MODEL_SHORT_NAME}/full_finetune \ + fabric.loggers.name=${TASK} +} + +function continual_full_finetune_8_tasks() { + fusion_bench \ + --config-dir ${SCRIPT_DIR}/config \ + fabric.devices=4 \ + fabric.loggers.root_dir=outputs/${MODEL_SHORT_NAME}/continual_full_finetune \ + fabric.loggers.name=TA8 \ + method=classification/clip_continual_finetune \ + method.num_steps=4000 \ + method.batch_size=32 \ + method.save_interval=2000 \ + method.learning_rate=1e-5 \ + method.shuffle_order=true \ + modelpool=clip-finetune_TA8 \ + modelpool.base_model=${MODEL} +} + +function continual_full_finetune_14_tasks() { + fusion_bench \ + --config-dir ${SCRIPT_DIR}/config \ + fabric.devices=4 \ + fabric.loggers.root_dir=outputs/${MODEL_SHORT_NAME}/continual_full_finetune \ + fabric.loggers.name=TALL14 \ + method=classification/clip_continual_finetune \ + method.num_steps=4000 \ + method.batch_size=32 \ + method.save_interval=2000 \ + method.learning_rate=1e-5 \ + method.shuffle_order=true \ + modelpool=clip-finetune_TALL14 \ + modelpool.base_model=${MODEL} +} + + +function continual_full_finetune_20_tasks() { + fusion_bench \ + --config-dir ${SCRIPT_DIR}/config \ + fabric.devices=4 \ + fabric.loggers.root_dir=outputs/${MODEL_SHORT_NAME}/continual_full_finetune \ + fabric.loggers.name=TALL20 \ + method=classification/clip_continual_finetune \ + method.num_steps=4000 \ + method.batch_size=32 \ + method.save_interval=2000 \ + method.learning_rate=1e-5 \ + method.shuffle_order=true \ + modelpool=clip-finetune_TALL20 \ + modelpool.base_model=${MODEL} +} + +for version in 0 1 2 3 4 5 6 7 8 9; do + continual_full_finetune_8_tasks + continual_full_finetune_14_tasks + continual_full_finetune_20_tasks +done + +for TASK in oxford_flowers102 pcam fer2013 oxford-iiit-pet stl10 food101 fashion_mnist emnist_letters kmnist rendered-sst2; do + full_finetune +done diff --git a/examples/clip_finetune/clip_finetune_L14.sh b/examples/clip_finetune/clip_finetune_L14.sh new file mode 100755 index 00000000..3ce49cfe --- /dev/null +++ b/examples/clip_finetune/clip_finetune_L14.sh @@ -0,0 +1,77 @@ +#!/bin/bash +SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd) +# pre-trained model path +MODEL=openai/clip-vit-large-patch14 +MODEL_SHORT_NAME=ViT-L-14 +# TASKS: sun397 stanford_cars resisc45 eurosat svhn gtsrb mnist dtd + +# Full fine-tune CLIP-ViT-B/16: +function full_finetune() { + fusion_bench \ + --config-dir ${SCRIPT_DIR}/config \ + fabric.devices=8 \ + method=classification/clip_finetune \ + method.num_steps=4000 \ + method.batch_size=16 \ + method.save_interval=2000 \ + method.learning_rate=1e-5 \ + modelpool=clip-finetune_${TASK} \ + modelpool.base_model=${MODEL} \ + fabric.loggers.root_dir=outputs/${MODEL_SHORT_NAME}/full_finetune \ + fabric.loggers.name=${TASK} +} + +function continual_full_finetune_8_tasks() { + fusion_bench \ + --config-dir ${SCRIPT_DIR}/config \ + fabric.devices=4 \ + fabric.loggers.root_dir=outputs/${MODEL_SHORT_NAME}/continual_full_finetune \ + fabric.loggers.name=TA8 \ + method=classification/clip_continual_finetune \ + method.num_steps=4000 \ + method.batch_size=32 \ + method.save_interval=2000 \ + method.learning_rate=1e-5 \ + method.shuffle_order=true \ + modelpool=clip-finetune_TA8 \ + modelpool.base_model=${MODEL} +} + +function continual_full_finetune_14_tasks() { + fusion_bench \ + --config-dir ${SCRIPT_DIR}/config \ + fabric.devices=8 \ + fabric.loggers.root_dir=outputs/${MODEL_SHORT_NAME}/continual_full_finetune \ + fabric.loggers.name=TALL14 \ + method=classification/clip_continual_finetune \ + method.num_steps=4000 \ + method.batch_size=16 \ + method.save_interval=2000 \ + method.learning_rate=1e-5 \ + method.shuffle_order=true \ + modelpool=clip-finetune_TALL14 \ + modelpool.base_model=${MODEL} +} + + +function continual_full_finetune_20_tasks() { + fusion_bench \ + --config-dir ${SCRIPT_DIR}/config \ + fabric.devices=8 \ + fabric.loggers.root_dir=outputs/${MODEL_SHORT_NAME}/continual_full_finetune \ + fabric.loggers.name=TALL20 \ + method=classification/clip_continual_finetune \ + method.num_steps=4000 \ + method.batch_size=16 \ + method.save_interval=2000 \ + method.learning_rate=1e-5 \ + method.shuffle_order=true \ + modelpool=clip-finetune_TALL20 \ + modelpool.base_model=${MODEL} +} + + +for TASK in oxford_flowers102 pcam fer2013 oxford-iiit-pet stl10 food101 fashion_mnist emnist_letters kmnist rendered-sst2 +do + full_finetune +done diff --git a/examples/clip_finetune/config/modelpool/clip-finetune_TA8.yaml b/examples/clip_finetune/config/modelpool/clip-finetune_TA8.yaml new file mode 100644 index 00000000..56ea6028 --- /dev/null +++ b/examples/clip_finetune/config/modelpool/clip-finetune_TA8.yaml @@ -0,0 +1,16 @@ +defaults: + - /dataset/image_classification/train@train_datasets: the_eight_tasks + - _self_ + +_target_: fusion_bench.modelpool.CLIPVisionModelPool + +base_model: openai/clip-vit-base-patch32 + +models: + _pretrained_: + _target_: transformers.CLIPVisionModel.from_pretrained + pretrained_model_name_or_path: ${...base_model} + +processor: + _target_: transformers.CLIPProcessor.from_pretrained + pretrained_model_name_or_path: ${..base_model} diff --git a/examples/clip_finetune/config/modelpool/clip-finetune_TALL14.yaml b/examples/clip_finetune/config/modelpool/clip-finetune_TALL14.yaml new file mode 100644 index 00000000..80e01db1 --- /dev/null +++ b/examples/clip_finetune/config/modelpool/clip-finetune_TALL14.yaml @@ -0,0 +1,16 @@ +defaults: + - /dataset/image_classification/train@train_datasets: TALL14 + - _self_ + +_target_: fusion_bench.modelpool.CLIPVisionModelPool + +base_model: openai/clip-vit-base-patch32 + +models: + _pretrained_: + _target_: transformers.CLIPVisionModel.from_pretrained + pretrained_model_name_or_path: ${...base_model} + +processor: + _target_: transformers.CLIPProcessor.from_pretrained + pretrained_model_name_or_path: ${..base_model} diff --git a/examples/clip_finetune/config/modelpool/clip-finetune_TALL20.yaml b/examples/clip_finetune/config/modelpool/clip-finetune_TALL20.yaml new file mode 100644 index 00000000..a373d504 --- /dev/null +++ b/examples/clip_finetune/config/modelpool/clip-finetune_TALL20.yaml @@ -0,0 +1,16 @@ +defaults: + - /dataset/image_classification/train@train_datasets: TALL20 + - _self_ + +_target_: fusion_bench.modelpool.CLIPVisionModelPool + +base_model: openai/clip-vit-base-patch32 + +models: + _pretrained_: + _target_: transformers.CLIPVisionModel.from_pretrained + pretrained_model_name_or_path: ${...base_model} + +processor: + _target_: transformers.CLIPProcessor.from_pretrained + pretrained_model_name_or_path: ${..base_model} diff --git a/examples/clip_finetune/config/modelpool/clip-finetune_cifar10.yaml b/examples/clip_finetune/config/modelpool/clip-finetune_cifar10.yaml new file mode 100644 index 00000000..755c3f0c --- /dev/null +++ b/examples/clip_finetune/config/modelpool/clip-finetune_cifar10.yaml @@ -0,0 +1,18 @@ +_target_: fusion_bench.modelpool.CLIPVisionModelPool + +base_model: openai/clip-vit-base-patch32 + +models: + _pretrained_: + _target_: transformers.CLIPVisionModel.from_pretrained + pretrained_model_name_or_path: ${...base_model} + +train_datasets: + cifar10: + _target_: datasets.load_dataset + path: tanganke/cifar10 + split: train + +processor: + _target_: transformers.CLIPProcessor.from_pretrained + pretrained_model_name_or_path: ${..base_model} diff --git a/examples/clip_finetune/config/modelpool/clip-finetune_cifar100.yaml b/examples/clip_finetune/config/modelpool/clip-finetune_cifar100.yaml new file mode 100644 index 00000000..969eae1b --- /dev/null +++ b/examples/clip_finetune/config/modelpool/clip-finetune_cifar100.yaml @@ -0,0 +1,18 @@ +_target_: fusion_bench.modelpool.CLIPVisionModelPool + +base_model: openai/clip-vit-base-patch32 + +models: + _pretrained_: + _target_: transformers.CLIPVisionModel.from_pretrained + pretrained_model_name_or_path: ${...base_model} + +train_datasets: + cifar100: + _target_: datasets.load_dataset + path: tanganke/cifar100 + split: train + +processor: + _target_: transformers.CLIPProcessor.from_pretrained + pretrained_model_name_or_path: ${..base_model} diff --git a/examples/clip_finetune/config/modelpool/clip-finetune_emnist_letters.yaml b/examples/clip_finetune/config/modelpool/clip-finetune_emnist_letters.yaml new file mode 100644 index 00000000..012cbc7a --- /dev/null +++ b/examples/clip_finetune/config/modelpool/clip-finetune_emnist_letters.yaml @@ -0,0 +1,18 @@ +_target_: fusion_bench.modelpool.CLIPVisionModelPool + +base_model: openai/clip-vit-base-patch32 + +models: + _pretrained_: + _target_: transformers.CLIPVisionModel.from_pretrained + pretrained_model_name_or_path: ${...base_model} + +train_datasets: + emnist_letters: + _target_: datasets.load_dataset + path: tanganke/emnist_letters + split: train + +processor: + _target_: transformers.CLIPProcessor.from_pretrained + pretrained_model_name_or_path: ${..base_model} diff --git a/examples/clip_finetune/config/modelpool/clip-finetune_fashion_mnist.yaml b/examples/clip_finetune/config/modelpool/clip-finetune_fashion_mnist.yaml new file mode 100644 index 00000000..c4174cf1 --- /dev/null +++ b/examples/clip_finetune/config/modelpool/clip-finetune_fashion_mnist.yaml @@ -0,0 +1,18 @@ +_target_: fusion_bench.modelpool.CLIPVisionModelPool + +base_model: openai/clip-vit-base-patch32 + +models: + _pretrained_: + _target_: transformers.CLIPVisionModel.from_pretrained + pretrained_model_name_or_path: ${...base_model} + +train_datasets: + fashion_mnist: + _target_: datasets.load_dataset + path: zalando-datasets/fashion_mnist + split: train + +processor: + _target_: transformers.CLIPProcessor.from_pretrained + pretrained_model_name_or_path: ${..base_model} diff --git a/examples/clip_finetune/config/modelpool/clip-finetune_fer2013.yaml b/examples/clip_finetune/config/modelpool/clip-finetune_fer2013.yaml new file mode 100644 index 00000000..b0b390a6 --- /dev/null +++ b/examples/clip_finetune/config/modelpool/clip-finetune_fer2013.yaml @@ -0,0 +1,17 @@ +_target_: fusion_bench.modelpool.CLIPVisionModelPool + +base_model: openai/clip-vit-base-patch32 + +models: + _pretrained_: + _target_: transformers.CLIPVisionModel.from_pretrained + pretrained_model_name_or_path: ${...base_model} + +train_datasets: + fer2013: + _target_: fusion_bench.dataset.fer2013.load_fer2013 + split: train + +processor: + _target_: transformers.CLIPProcessor.from_pretrained + pretrained_model_name_or_path: ${..base_model} diff --git a/examples/clip_finetune/config/modelpool/clip-finetune_food101.yaml b/examples/clip_finetune/config/modelpool/clip-finetune_food101.yaml new file mode 100644 index 00000000..0310c3b7 --- /dev/null +++ b/examples/clip_finetune/config/modelpool/clip-finetune_food101.yaml @@ -0,0 +1,18 @@ +_target_: fusion_bench.modelpool.CLIPVisionModelPool + +base_model: openai/clip-vit-base-patch32 + +models: + _pretrained_: + _target_: transformers.CLIPVisionModel.from_pretrained + pretrained_model_name_or_path: ${...base_model} + +train_datasets: + food101: + _target_: datasets.load_dataset + path: ethz/food101 + split: train + +processor: + _target_: transformers.CLIPProcessor.from_pretrained + pretrained_model_name_or_path: ${..base_model} diff --git a/examples/clip_finetune/config/modelpool/clip-finetune_kmnist.yaml b/examples/clip_finetune/config/modelpool/clip-finetune_kmnist.yaml new file mode 100644 index 00000000..cbd03d42 --- /dev/null +++ b/examples/clip_finetune/config/modelpool/clip-finetune_kmnist.yaml @@ -0,0 +1,18 @@ +_target_: fusion_bench.modelpool.CLIPVisionModelPool + +base_model: openai/clip-vit-base-patch32 + +models: + _pretrained_: + _target_: transformers.CLIPVisionModel.from_pretrained + pretrained_model_name_or_path: ${...base_model} + +train_datasets: + kmnist: + _target_: datasets.load_dataset + path: tanganke/kmnist + split: train + +processor: + _target_: transformers.CLIPProcessor.from_pretrained + pretrained_model_name_or_path: ${..base_model} diff --git a/examples/clip_finetune/config/modelpool/clip-finetune_oxford-iiit-pet.yaml b/examples/clip_finetune/config/modelpool/clip-finetune_oxford-iiit-pet.yaml new file mode 100644 index 00000000..b5eb6e56 --- /dev/null +++ b/examples/clip_finetune/config/modelpool/clip-finetune_oxford-iiit-pet.yaml @@ -0,0 +1,18 @@ +_target_: fusion_bench.modelpool.CLIPVisionModelPool + +base_model: openai/clip-vit-base-patch32 + +models: + _pretrained_: + _target_: transformers.CLIPVisionModel.from_pretrained + pretrained_model_name_or_path: ${...base_model} + +train_datasets: + oxford-iiit-pet: + _target_: datasets.load_dataset + path: timm/oxford-iiit-pet + split: train + +processor: + _target_: transformers.CLIPProcessor.from_pretrained + pretrained_model_name_or_path: ${..base_model} diff --git a/examples/clip_finetune/config/modelpool/clip-finetune_oxford_flowers102.yaml b/examples/clip_finetune/config/modelpool/clip-finetune_oxford_flowers102.yaml new file mode 100644 index 00000000..66b9efc9 --- /dev/null +++ b/examples/clip_finetune/config/modelpool/clip-finetune_oxford_flowers102.yaml @@ -0,0 +1,18 @@ +_target_: fusion_bench.modelpool.CLIPVisionModelPool + +base_model: openai/clip-vit-base-patch32 + +models: + _pretrained_: + _target_: transformers.CLIPVisionModel.from_pretrained + pretrained_model_name_or_path: ${...base_model} + +train_datasets: + oxford_flowers102: + _target_: datasets.load_dataset + path: dpdl-benchmark/oxford_flowers102 + split: train + +processor: + _target_: transformers.CLIPProcessor.from_pretrained + pretrained_model_name_or_path: ${..base_model} diff --git a/examples/clip_finetune/config/modelpool/clip-finetune_pcam.yaml b/examples/clip_finetune/config/modelpool/clip-finetune_pcam.yaml new file mode 100644 index 00000000..57addd90 --- /dev/null +++ b/examples/clip_finetune/config/modelpool/clip-finetune_pcam.yaml @@ -0,0 +1,18 @@ +_target_: fusion_bench.modelpool.CLIPVisionModelPool + +base_model: openai/clip-vit-base-patch32 + +models: + _pretrained_: + _target_: transformers.CLIPVisionModel.from_pretrained + pretrained_model_name_or_path: ${...base_model} + +train_datasets: + pcam: + _target_: datasets.load_dataset + path: 1aurent/PatchCamelyon + split: train + +processor: + _target_: transformers.CLIPProcessor.from_pretrained + pretrained_model_name_or_path: ${..base_model} diff --git a/examples/clip_finetune/config/modelpool/clip-finetune_rendered-sst2.yaml b/examples/clip_finetune/config/modelpool/clip-finetune_rendered-sst2.yaml new file mode 100644 index 00000000..bb0e2bf2 --- /dev/null +++ b/examples/clip_finetune/config/modelpool/clip-finetune_rendered-sst2.yaml @@ -0,0 +1,18 @@ +_target_: fusion_bench.modelpool.CLIPVisionModelPool + +base_model: openai/clip-vit-base-patch32 + +models: + _pretrained_: + _target_: transformers.CLIPVisionModel.from_pretrained + pretrained_model_name_or_path: ${...base_model} + +train_datasets: + rendered-sst2: + _target_: datasets.load_dataset + path: nateraw/rendered-sst2 + split: train + +processor: + _target_: transformers.CLIPProcessor.from_pretrained + pretrained_model_name_or_path: ${..base_model} diff --git a/examples/clip_finetune/config/modelpool/clip-finetune_stl10.yaml b/examples/clip_finetune/config/modelpool/clip-finetune_stl10.yaml new file mode 100644 index 00000000..f04b23fa --- /dev/null +++ b/examples/clip_finetune/config/modelpool/clip-finetune_stl10.yaml @@ -0,0 +1,18 @@ +_target_: fusion_bench.modelpool.CLIPVisionModelPool + +base_model: openai/clip-vit-base-patch32 + +models: + _pretrained_: + _target_: transformers.CLIPVisionModel.from_pretrained + pretrained_model_name_or_path: ${...base_model} + +train_datasets: + stl10: + _target_: datasets.load_dataset + path: tanganke/stl10 + split: train + +processor: + _target_: transformers.CLIPProcessor.from_pretrained + pretrained_model_name_or_path: ${..base_model} diff --git a/examples/clip_finetune/config/taskpool/clip-vit-classification_cifar10.yaml b/examples/clip_finetune/config/taskpool/clip-vit-classification_cifar10.yaml new file mode 100644 index 00000000..19388376 --- /dev/null +++ b/examples/clip_finetune/config/taskpool/clip-vit-classification_cifar10.yaml @@ -0,0 +1,31 @@ +_target_: fusion_bench.taskpool.CLIPVisionModelTaskPool +_recursive_: false + +test_datasets: + cifar10: + _target_: datasets.load_dataset + path: tanganke/cifar10 + split: test + +base_model: openai/clip-vit-base-patch32 +clip_model: + _target_: transformers.CLIPModel.from_pretrained + pretrained_model_name_or_path: ${..base_model} # The base model to use +processor: + _target_: transformers.CLIPProcessor.from_pretrained + pretrained_model_name_or_path: ${..base_model} # The base model to use +data_processor: ${.processor} +dataloader_kwargs: + batch_size: 128 # The batch size for the data loader + num_workers: 8 # The number of worker processes for data loading + pin_memory: True # Whether to pin memory in data loader + drop_last: False # Whether to drop the last incomplete batch + shuffle: False # Whether to shuffle the data + +# === layer-wise feature saving === +# The path to save the features to, if none then the features are not saved +# This is the path to a directory, the features of task `task_name` will be saved in `feature_save_path/task_name.csv` +layer_wise_feature_save_path: null +layer_wise_feature_first_token_only: true # Whether to save only the first token of the features +# The maximum number of samples to save the features for +layer_wise_feature_max_num: 1000 diff --git a/examples/clip_finetune/config/taskpool/clip-vit-classification_cifar100.yaml b/examples/clip_finetune/config/taskpool/clip-vit-classification_cifar100.yaml new file mode 100644 index 00000000..eb90b8dc --- /dev/null +++ b/examples/clip_finetune/config/taskpool/clip-vit-classification_cifar100.yaml @@ -0,0 +1,31 @@ +_target_: fusion_bench.taskpool.CLIPVisionModelTaskPool +_recursive_: false + +test_datasets: + cifar100: + _target_: datasets.load_dataset + path: tanganke/cifar100 + split: test + +base_model: openai/clip-vit-base-patch32 +clip_model: + _target_: transformers.CLIPModel.from_pretrained + pretrained_model_name_or_path: ${..base_model} # The base model to use +processor: + _target_: transformers.CLIPProcessor.from_pretrained + pretrained_model_name_or_path: ${..base_model} # The base model to use +data_processor: ${.processor} +dataloader_kwargs: + batch_size: 128 # The batch size for the data loader + num_workers: 8 # The number of worker processes for data loading + pin_memory: True # Whether to pin memory in data loader + drop_last: False # Whether to drop the last incomplete batch + shuffle: False # Whether to shuffle the data + +# === layer-wise feature saving === +# The path to save the features to, if none then the features are not saved +# This is the path to a directory, the features of task `task_name` will be saved in `feature_save_path/task_name.csv` +layer_wise_feature_save_path: null +layer_wise_feature_first_token_only: true # Whether to save only the first token of the features +# The maximum number of samples to save the features for +layer_wise_feature_max_num: 1000 diff --git a/examples/clip_finetune/config/taskpool/clip-vit-classification_emnist_letters.yaml b/examples/clip_finetune/config/taskpool/clip-vit-classification_emnist_letters.yaml new file mode 100644 index 00000000..add1969a --- /dev/null +++ b/examples/clip_finetune/config/taskpool/clip-vit-classification_emnist_letters.yaml @@ -0,0 +1,31 @@ +_target_: fusion_bench.taskpool.CLIPVisionModelTaskPool +_recursive_: false + +test_datasets: + emnist_letters: + _target_: datasets.load_dataset + path: tanganke/emnist_letters + split: test + +base_model: openai/clip-vit-base-patch32 +clip_model: + _target_: transformers.CLIPModel.from_pretrained + pretrained_model_name_or_path: ${..base_model} # The base model to use +processor: + _target_: transformers.CLIPProcessor.from_pretrained + pretrained_model_name_or_path: ${..base_model} # The base model to use +data_processor: ${.processor} +dataloader_kwargs: + batch_size: 128 # The batch size for the data loader + num_workers: 8 # The number of worker processes for data loading + pin_memory: True # Whether to pin memory in data loader + drop_last: False # Whether to drop the last incomplete batch + shuffle: False # Whether to shuffle the data + +# === layer-wise feature saving === +# The path to save the features to, if none then the features are not saved +# This is the path to a directory, the features of task `task_name` will be saved in `feature_save_path/task_name.csv` +layer_wise_feature_save_path: null +layer_wise_feature_first_token_only: true # Whether to save only the first token of the features +# The maximum number of samples to save the features for +layer_wise_feature_max_num: 1000 diff --git a/examples/clip_finetune/config/taskpool/clip-vit-classification_fashion_mnist.yaml b/examples/clip_finetune/config/taskpool/clip-vit-classification_fashion_mnist.yaml new file mode 100644 index 00000000..1804ee91 --- /dev/null +++ b/examples/clip_finetune/config/taskpool/clip-vit-classification_fashion_mnist.yaml @@ -0,0 +1,31 @@ +_target_: fusion_bench.taskpool.CLIPVisionModelTaskPool +_recursive_: false + +test_datasets: + fashion_mnist: + _target_: datasets.load_dataset + path: zalando-datasets/fashion_mnist + split: test + +base_model: openai/clip-vit-base-patch32 +clip_model: + _target_: transformers.CLIPModel.from_pretrained + pretrained_model_name_or_path: ${..base_model} # The base model to use +processor: + _target_: transformers.CLIPProcessor.from_pretrained + pretrained_model_name_or_path: ${..base_model} # The base model to use +data_processor: ${.processor} +dataloader_kwargs: + batch_size: 128 # The batch size for the data loader + num_workers: 8 # The number of worker processes for data loading + pin_memory: True # Whether to pin memory in data loader + drop_last: False # Whether to drop the last incomplete batch + shuffle: False # Whether to shuffle the data + +# === layer-wise feature saving === +# The path to save the features to, if none then the features are not saved +# This is the path to a directory, the features of task `task_name` will be saved in `feature_save_path/task_name.csv` +layer_wise_feature_save_path: null +layer_wise_feature_first_token_only: true # Whether to save only the first token of the features +# The maximum number of samples to save the features for +layer_wise_feature_max_num: 1000 diff --git a/examples/clip_finetune/config/taskpool/clip-vit-classification_fer2013.yaml b/examples/clip_finetune/config/taskpool/clip-vit-classification_fer2013.yaml new file mode 100644 index 00000000..5e0009c7 --- /dev/null +++ b/examples/clip_finetune/config/taskpool/clip-vit-classification_fer2013.yaml @@ -0,0 +1,30 @@ +_target_: fusion_bench.taskpool.CLIPVisionModelTaskPool +_recursive_: false + +test_datasets: + fer2013: + _target_: fusion_bench.dataset.fer2013.load_fer2013 + split: test + +base_model: openai/clip-vit-base-patch32 +clip_model: + _target_: transformers.CLIPModel.from_pretrained + pretrained_model_name_or_path: ${..base_model} # The base model to use +processor: + _target_: transformers.CLIPProcessor.from_pretrained + pretrained_model_name_or_path: ${..base_model} # The base model to use +data_processor: ${.processor} +dataloader_kwargs: + batch_size: 128 # The batch size for the data loader + num_workers: 8 # The number of worker processes for data loading + pin_memory: True # Whether to pin memory in data loader + drop_last: False # Whether to drop the last incomplete batch + shuffle: False # Whether to shuffle the data + +# === layer-wise feature saving === +# The path to save the features to, if none then the features are not saved +# This is the path to a directory, the features of task `task_name` will be saved in `feature_save_path/task_name.csv` +layer_wise_feature_save_path: null +layer_wise_feature_first_token_only: true # Whether to save only the first token of the features +# The maximum number of samples to save the features for +layer_wise_feature_max_num: 1000 diff --git a/examples/clip_finetune/config/taskpool/clip-vit-classification_food101.yaml b/examples/clip_finetune/config/taskpool/clip-vit-classification_food101.yaml new file mode 100644 index 00000000..b6cd490c --- /dev/null +++ b/examples/clip_finetune/config/taskpool/clip-vit-classification_food101.yaml @@ -0,0 +1,31 @@ +_target_: fusion_bench.taskpool.CLIPVisionModelTaskPool +_recursive_: false + +test_datasets: + food101: + _target_: datasets.load_dataset + path: ethz/food101 + split: validation + +base_model: openai/clip-vit-base-patch32 +clip_model: + _target_: transformers.CLIPModel.from_pretrained + pretrained_model_name_or_path: ${..base_model} # The base model to use +processor: + _target_: transformers.CLIPProcessor.from_pretrained + pretrained_model_name_or_path: ${..base_model} # The base model to use +data_processor: ${.processor} +dataloader_kwargs: + batch_size: 128 # The batch size for the data loader + num_workers: 8 # The number of worker processes for data loading + pin_memory: True # Whether to pin memory in data loader + drop_last: False # Whether to drop the last incomplete batch + shuffle: False # Whether to shuffle the data + +# === layer-wise feature saving === +# The path to save the features to, if none then the features are not saved +# This is the path to a directory, the features of task `task_name` will be saved in `feature_save_path/task_name.csv` +layer_wise_feature_save_path: null +layer_wise_feature_first_token_only: true # Whether to save only the first token of the features +# The maximum number of samples to save the features for +layer_wise_feature_max_num: 1000 diff --git a/examples/clip_finetune/config/taskpool/clip-vit-classification_kmnist.yaml b/examples/clip_finetune/config/taskpool/clip-vit-classification_kmnist.yaml new file mode 100644 index 00000000..ca551fce --- /dev/null +++ b/examples/clip_finetune/config/taskpool/clip-vit-classification_kmnist.yaml @@ -0,0 +1,31 @@ +_target_: fusion_bench.taskpool.CLIPVisionModelTaskPool +_recursive_: false + +test_datasets: + kmnist: + _target_: datasets.load_dataset + path: tanganke/kmnist + split: test + +base_model: openai/clip-vit-base-patch32 +clip_model: + _target_: transformers.CLIPModel.from_pretrained + pretrained_model_name_or_path: ${..base_model} # The base model to use +processor: + _target_: transformers.CLIPProcessor.from_pretrained + pretrained_model_name_or_path: ${..base_model} # The base model to use +data_processor: ${.processor} +dataloader_kwargs: + batch_size: 128 # The batch size for the data loader + num_workers: 8 # The number of worker processes for data loading + pin_memory: True # Whether to pin memory in data loader + drop_last: False # Whether to drop the last incomplete batch + shuffle: False # Whether to shuffle the data + +# === layer-wise feature saving === +# The path to save the features to, if none then the features are not saved +# This is the path to a directory, the features of task `task_name` will be saved in `feature_save_path/task_name.csv` +layer_wise_feature_save_path: null +layer_wise_feature_first_token_only: true # Whether to save only the first token of the features +# The maximum number of samples to save the features for +layer_wise_feature_max_num: 1000 diff --git a/examples/clip_finetune/config/taskpool/clip-vit-classification_oxford-iiit-pet.yaml b/examples/clip_finetune/config/taskpool/clip-vit-classification_oxford-iiit-pet.yaml new file mode 100644 index 00000000..58dfd3fb --- /dev/null +++ b/examples/clip_finetune/config/taskpool/clip-vit-classification_oxford-iiit-pet.yaml @@ -0,0 +1,31 @@ +_target_: fusion_bench.taskpool.CLIPVisionModelTaskPool +_recursive_: false + +test_datasets: + oxford-iiit-pet: + _target_: datasets.load_dataset + path: timm/oxford-iiit-pet + split: test + +base_model: openai/clip-vit-base-patch32 +clip_model: + _target_: transformers.CLIPModel.from_pretrained + pretrained_model_name_or_path: ${..base_model} # The base model to use +processor: + _target_: transformers.CLIPProcessor.from_pretrained + pretrained_model_name_or_path: ${..base_model} # The base model to use +data_processor: ${.processor} +dataloader_kwargs: + batch_size: 128 # The batch size for the data loader + num_workers: 8 # The number of worker processes for data loading + pin_memory: True # Whether to pin memory in data loader + drop_last: False # Whether to drop the last incomplete batch + shuffle: False # Whether to shuffle the data + +# === layer-wise feature saving === +# The path to save the features to, if none then the features are not saved +# This is the path to a directory, the features of task `task_name` will be saved in `feature_save_path/task_name.csv` +layer_wise_feature_save_path: null +layer_wise_feature_first_token_only: true # Whether to save only the first token of the features +# The maximum number of samples to save the features for +layer_wise_feature_max_num: 1000 diff --git a/examples/clip_finetune/config/taskpool/clip-vit-classification_oxford_flowers102.yaml b/examples/clip_finetune/config/taskpool/clip-vit-classification_oxford_flowers102.yaml new file mode 100644 index 00000000..46602e5a --- /dev/null +++ b/examples/clip_finetune/config/taskpool/clip-vit-classification_oxford_flowers102.yaml @@ -0,0 +1,31 @@ +_target_: fusion_bench.taskpool.CLIPVisionModelTaskPool +_recursive_: false + +test_datasets: + oxford_flowers102: + _target_: datasets.load_dataset + path: dpdl-benchmark/oxford_flowers102 + split: test + +base_model: openai/clip-vit-base-patch32 +clip_model: + _target_: transformers.CLIPModel.from_pretrained + pretrained_model_name_or_path: ${..base_model} # The base model to use +processor: + _target_: transformers.CLIPProcessor.from_pretrained + pretrained_model_name_or_path: ${..base_model} # The base model to use +data_processor: ${.processor} +dataloader_kwargs: + batch_size: 128 # The batch size for the data loader + num_workers: 8 # The number of worker processes for data loading + pin_memory: True # Whether to pin memory in data loader + drop_last: False # Whether to drop the last incomplete batch + shuffle: False # Whether to shuffle the data + +# === layer-wise feature saving === +# The path to save the features to, if none then the features are not saved +# This is the path to a directory, the features of task `task_name` will be saved in `feature_save_path/task_name.csv` +layer_wise_feature_save_path: null +layer_wise_feature_first_token_only: true # Whether to save only the first token of the features +# The maximum number of samples to save the features for +layer_wise_feature_max_num: 1000 diff --git a/examples/clip_finetune/config/taskpool/clip-vit-classification_oxford_flowers102_val.yaml b/examples/clip_finetune/config/taskpool/clip-vit-classification_oxford_flowers102_val.yaml new file mode 100644 index 00000000..2a2b953b --- /dev/null +++ b/examples/clip_finetune/config/taskpool/clip-vit-classification_oxford_flowers102_val.yaml @@ -0,0 +1,31 @@ +_target_: fusion_bench.taskpool.CLIPVisionModelTaskPool +_recursive_: false + +test_datasets: + oxford_flowers102: + _target_: datasets.load_dataset + path: dpdl-benchmark/oxford_flowers102 + split: validation + +base_model: openai/clip-vit-base-patch32 +clip_model: + _target_: transformers.CLIPModel.from_pretrained + pretrained_model_name_or_path: ${..base_model} # The base model to use +processor: + _target_: transformers.CLIPProcessor.from_pretrained + pretrained_model_name_or_path: ${..base_model} # The base model to use +data_processor: ${.processor} +dataloader_kwargs: + batch_size: 128 # The batch size for the data loader + num_workers: 8 # The number of worker processes for data loading + pin_memory: True # Whether to pin memory in data loader + drop_last: False # Whether to drop the last incomplete batch + shuffle: False # Whether to shuffle the data + +# === layer-wise feature saving === +# The path to save the features to, if none then the features are not saved +# This is the path to a directory, the features of task `task_name` will be saved in `feature_save_path/task_name.csv` +layer_wise_feature_save_path: null +layer_wise_feature_first_token_only: true # Whether to save only the first token of the features +# The maximum number of samples to save the features for +layer_wise_feature_max_num: 1000 diff --git a/examples/clip_finetune/config/taskpool/clip-vit-classification_pcam.yaml b/examples/clip_finetune/config/taskpool/clip-vit-classification_pcam.yaml new file mode 100644 index 00000000..e50a11e3 --- /dev/null +++ b/examples/clip_finetune/config/taskpool/clip-vit-classification_pcam.yaml @@ -0,0 +1,31 @@ +_target_: fusion_bench.taskpool.CLIPVisionModelTaskPool +_recursive_: false + +test_datasets: + pcam: + _target_: datasets.load_dataset + path: 1aurent/PatchCamelyon + split: test + +base_model: openai/clip-vit-base-patch32 +clip_model: + _target_: transformers.CLIPModel.from_pretrained + pretrained_model_name_or_path: ${..base_model} # The base model to use +processor: + _target_: transformers.CLIPProcessor.from_pretrained + pretrained_model_name_or_path: ${..base_model} # The base model to use +data_processor: ${.processor} +dataloader_kwargs: + batch_size: 128 # The batch size for the data loader + num_workers: 8 # The number of worker processes for data loading + pin_memory: True # Whether to pin memory in data loader + drop_last: False # Whether to drop the last incomplete batch + shuffle: False # Whether to shuffle the data + +# === layer-wise feature saving === +# The path to save the features to, if none then the features are not saved +# This is the path to a directory, the features of task `task_name` will be saved in `feature_save_path/task_name.csv` +layer_wise_feature_save_path: null +layer_wise_feature_first_token_only: true # Whether to save only the first token of the features +# The maximum number of samples to save the features for +layer_wise_feature_max_num: 1000 diff --git a/examples/clip_finetune/config/taskpool/clip-vit-classification_rendered-sst2.yaml b/examples/clip_finetune/config/taskpool/clip-vit-classification_rendered-sst2.yaml new file mode 100644 index 00000000..d10e6606 --- /dev/null +++ b/examples/clip_finetune/config/taskpool/clip-vit-classification_rendered-sst2.yaml @@ -0,0 +1,31 @@ +_target_: fusion_bench.taskpool.CLIPVisionModelTaskPool +_recursive_: false + +test_datasets: + rendered-sst2: + _target_: datasets.load_dataset + path: nateraw/rendered-sst2 + split: test + +base_model: openai/clip-vit-base-patch32 +clip_model: + _target_: transformers.CLIPModel.from_pretrained + pretrained_model_name_or_path: ${..base_model} # The base model to use +processor: + _target_: transformers.CLIPProcessor.from_pretrained + pretrained_model_name_or_path: ${..base_model} # The base model to use +data_processor: ${.processor} +dataloader_kwargs: + batch_size: 128 # The batch size for the data loader + num_workers: 8 # The number of worker processes for data loading + pin_memory: True # Whether to pin memory in data loader + drop_last: False # Whether to drop the last incomplete batch + shuffle: False # Whether to shuffle the data + +# === layer-wise feature saving === +# The path to save the features to, if none then the features are not saved +# This is the path to a directory, the features of task `task_name` will be saved in `feature_save_path/task_name.csv` +layer_wise_feature_save_path: null +layer_wise_feature_first_token_only: true # Whether to save only the first token of the features +# The maximum number of samples to save the features for +layer_wise_feature_max_num: 1000 diff --git a/examples/clip_finetune/config/taskpool/clip-vit-classification_stl10.yaml b/examples/clip_finetune/config/taskpool/clip-vit-classification_stl10.yaml new file mode 100644 index 00000000..93973e96 --- /dev/null +++ b/examples/clip_finetune/config/taskpool/clip-vit-classification_stl10.yaml @@ -0,0 +1,31 @@ +_target_: fusion_bench.taskpool.CLIPVisionModelTaskPool +_recursive_: false + +test_datasets: + stl10: + _target_: datasets.load_dataset + path: tanganke/stl10 + split: test + +base_model: openai/clip-vit-base-patch32 +clip_model: + _target_: transformers.CLIPModel.from_pretrained + pretrained_model_name_or_path: ${..base_model} # The base model to use +processor: + _target_: transformers.CLIPProcessor.from_pretrained + pretrained_model_name_or_path: ${..base_model} # The base model to use +data_processor: ${.processor} +dataloader_kwargs: + batch_size: 128 # The batch size for the data loader + num_workers: 8 # The number of worker processes for data loading + pin_memory: True # Whether to pin memory in data loader + drop_last: False # Whether to drop the last incomplete batch + shuffle: False # Whether to shuffle the data + +# === layer-wise feature saving === +# The path to save the features to, if none then the features are not saved +# This is the path to a directory, the features of task `task_name` will be saved in `feature_save_path/task_name.csv` +layer_wise_feature_save_path: null +layer_wise_feature_first_token_only: true # Whether to save only the first token of the features +# The maximum number of samples to save the features for +layer_wise_feature_max_num: 1000 diff --git a/examples/clip_finetune/convert_ckpt.ipynb b/examples/clip_finetune/convert_ckpt.ipynb new file mode 100644 index 00000000..302c3060 --- /dev/null +++ b/examples/clip_finetune/convert_ckpt.ipynb @@ -0,0 +1,68 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/data0/users/tanganke/anaconda3/envs/svd_proj/lib/python3.12/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", + " from .autonotebook import tqdm as notebook_tqdm\n" + ] + } + ], + "source": [ + "from fusion_bench.method.classification.clip_finetune import load_full_finetuned_vision_model\n", + "from transformers import CLIPVisionModel" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "pretrained_path = \"openai/clip-vit-base-patch16\"\n", + "state_dict_path = \"\" # Path to the state dict\n", + "output_path = \"\" # Path to the output directory\n", + "\n", + "model = load_full_finetuned_vision_model(\n", + " pretrained_path=pretrained_path,\n", + " state_dict_path=state_dict_path,\n", + " )\n", + "model.save_pretrained(output_path)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "svd_proj", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/clip_finetune/scripts/evaluate_single_task/vit-b-16/evaluate.sh b/examples/clip_finetune/scripts/evaluate_single_task/vit-b-16/evaluate.sh new file mode 100644 index 00000000..10fb93e0 --- /dev/null +++ b/examples/clip_finetune/scripts/evaluate_single_task/vit-b-16/evaluate.sh @@ -0,0 +1,17 @@ +TASK=rendered-sst2 + +# evaluate pretrained +fusion_bench --config-dir $PWD/config \ + method=dummy \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch16_individual \ + taskpool=clip-vit-classification_${TASK} \ + taskpool.base_model=openai/clip-vit-base-patch16 + +# evaluate fine-tuned +fusion_bench --config-dir $PWD/config \ + method=dummy \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch16_individual \ + modelpool.base_model=./tanganke/clip-vit-base-patch16_${TASK} \ + taskpool=clip-vit-classification_${TASK} \ + taskpool.base_model=openai/clip-vit-base-patch16 + diff --git a/examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/evaluate.sh b/examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/evaluate.sh new file mode 100644 index 00000000..05f25e61 --- /dev/null +++ b/examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/evaluate.sh @@ -0,0 +1,14 @@ +TASK=emnist_letters + +# evaluate pretrained +fusion_bench --config-dir $PWD/config \ + method=dummy \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_individual \ + taskpool=clip-vit-classification_${TASK} + +# evaluate fine-tuned +fusion_bench --config-dir $PWD/config \ + method=dummy \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_individual \ + modelpool.base_model=tanganke/clip-vit-base-patch32_${TASK} \ + taskpool=clip-vit-classification_${TASK} diff --git a/examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/fer2013.sh b/examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/fer2013.sh new file mode 100644 index 00000000..60098a46 --- /dev/null +++ b/examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/fer2013.sh @@ -0,0 +1,12 @@ +# evaluate pretrained +fusion_bench --config-dir $PWD/config \ + method=dummy \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_individual \ + taskpool=clip-vit-classification_fer2013 + +# evaluate fine-tuned +fusion_bench --config-dir $PWD/config \ + method=dummy \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_individual \ + modelpool.base_model=tanganke/clip-vit-base-patch32_fer2013 \ + taskpool=clip-vit-classification_fer2013 diff --git a/examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/food101.sh b/examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/food101.sh new file mode 100644 index 00000000..970ecd03 --- /dev/null +++ b/examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/food101.sh @@ -0,0 +1,12 @@ +# evaluate pretrained +fusion_bench --config-dir $PWD/config \ + method=dummy \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_individual \ + taskpool=clip-vit-classification_food101 + +# evaluate fine-tuned +fusion_bench --config-dir $PWD/config \ + method=dummy \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_individual \ + modelpool.base_model=tanganke/clip-vit-base-patch32_food101 \ + taskpool=clip-vit-classification_food101 diff --git a/examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/kmnist.sh b/examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/kmnist.sh new file mode 100644 index 00000000..576de175 --- /dev/null +++ b/examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/kmnist.sh @@ -0,0 +1,12 @@ +# evaluate pretrained +fusion_bench --config-dir $PWD/config \ + method=dummy \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_individual \ + taskpool=clip-vit-classification_kmnist + +# evaluate fine-tuned +fusion_bench --config-dir $PWD/config \ + method=dummy \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_individual \ + modelpool.base_model=tanganke/clip-vit-base-patch32_kmnist \ + taskpool=clip-vit-classification_kmnist diff --git a/examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/oxford-iiit-pet.sh b/examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/oxford-iiit-pet.sh new file mode 100644 index 00000000..7183796d --- /dev/null +++ b/examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/oxford-iiit-pet.sh @@ -0,0 +1,12 @@ +# evaluate pretrained +fusion_bench --config-dir $PWD/config \ + method=dummy \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_individual \ + taskpool=clip-vit-classification_oxford-iiit-pet + +# evaluate fine-tuned +fusion_bench --config-dir $PWD/config \ + method=dummy \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_individual \ + modelpool.base_model=tanganke/clip-vit-base-patch32_oxford-iiit-pet \ + taskpool=clip-vit-classification_oxford-iiit-pet diff --git a/examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/oxford_flowers102.sh b/examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/oxford_flowers102.sh new file mode 100644 index 00000000..d5c8dded --- /dev/null +++ b/examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/oxford_flowers102.sh @@ -0,0 +1,25 @@ +# evaluate pretrained +fusion_bench --config-dir $PWD/config \ + method=dummy \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_individual \ + taskpool=clip-vit-classification_oxford_flowers102 + +# evaluate fine-tuned +fusion_bench --config-dir $PWD/config \ + method=dummy \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_individual \ + modelpool.base_model=tanganke/clip-vit-base-patch32_oxford_flowers102 \ + taskpool=clip-vit-classification_oxford_flowers102 + +# evaluate pretrained +fusion_bench --config-dir $PWD/config \ + method=dummy \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_individual \ + taskpool=clip-vit-classification_oxford_flowers102_val + +# evaluate fine-tuned +fusion_bench --config-dir $PWD/config \ + method=dummy \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_individual \ + modelpool.base_model=tanganke/clip-vit-base-patch32_oxford_flowers102 \ + taskpool=clip-vit-classification_oxford_flowers102_val diff --git a/examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/pcam.sh b/examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/pcam.sh new file mode 100644 index 00000000..3b598b9f --- /dev/null +++ b/examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/pcam.sh @@ -0,0 +1,12 @@ +# evaluate pretrained +fusion_bench --config-dir $PWD/config \ + method=dummy \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_individual \ + taskpool=clip-vit-classification_pcam + +# evaluate fine-tuned +fusion_bench --config-dir $PWD/config \ + method=dummy \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_individual \ + modelpool.base_model=tanganke/clip-vit-base-patch32_pcam \ + taskpool=clip-vit-classification_pcam diff --git a/examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/rendered-sst2.sh b/examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/rendered-sst2.sh new file mode 100644 index 00000000..f4e08ef2 --- /dev/null +++ b/examples/clip_finetune/scripts/evaluate_single_task/vit-b-32/rendered-sst2.sh @@ -0,0 +1,12 @@ +# evaluate pretrained +fusion_bench --config-dir $PWD/config \ + method=dummy \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_individual \ + taskpool=clip-vit-classification_rendered-sst2 + +# evaluate fine-tuned +fusion_bench --config-dir $PWD/config \ + method=dummy \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_individual \ + modelpool.base_model=tanganke/clip-vit-base-patch32_rendered-sst2 \ + taskpool=clip-vit-classification_rendered-sst2 diff --git a/examples/clip_finetune/scripts/evaluate_single_task/vit-l-14/evaluate.sh b/examples/clip_finetune/scripts/evaluate_single_task/vit-l-14/evaluate.sh new file mode 100644 index 00000000..912e0f2c --- /dev/null +++ b/examples/clip_finetune/scripts/evaluate_single_task/vit-l-14/evaluate.sh @@ -0,0 +1,17 @@ +TASK=fer2013 + +# evaluate pretrained +fusion_bench --config-dir $PWD/config \ + method=dummy \ + modelpool=CLIPVisionModelPool/clip-vit-large-patch14_individual \ + taskpool=clip-vit-classification_${TASK} \ + taskpool.base_model=openai/clip-vit-large-patch14 + +# evaluate fine-tuned +fusion_bench --config-dir $PWD/config \ + method=dummy \ + modelpool=CLIPVisionModelPool/clip-vit-large-patch14_individual \ + modelpool.base_model=./tanganke/clip-vit-large-patch14_${TASK} \ + taskpool=clip-vit-classification_${TASK} \ + taskpool.base_model=openai/clip-vit-large-patch14 + diff --git a/examples/opcm/.gitignore b/examples/opcm/.gitignore new file mode 100644 index 00000000..47241b6e --- /dev/null +++ b/examples/opcm/.gitignore @@ -0,0 +1 @@ +images/ diff --git a/examples/opcm/clip_evaluate_single_task.sh b/examples/opcm/clip_evaluate_single_task.sh new file mode 100644 index 00000000..6e358246 --- /dev/null +++ b/examples/opcm/clip_evaluate_single_task.sh @@ -0,0 +1,87 @@ +#! /usr/bin/env bash +# In this script, we evaluate the performance of CLIP models on single tasks. +# Including ViT-B-32, ViT-B-16, ViT-L-14. + +# Pre-trained ViT-B-32 +fusion_bench \ + method=dummy \ + fabric.loggers.root_dir=outputs/single_task_evaluation \ + fabric.loggers.name=vit-b-32 \ + fabric.loggers.version=pretrained \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_individual \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL20 + +# Single-task evaluation of ViT-B-32 +for TASK in sun397 stanford-cars resisc45 eurosat svhn gtsrb mnist dtd oxford_flowers102 pcam fer2013 oxford-iiit-pet stl10 cifar100 cifar10 food101 fashion_mnist emnist_letters kmnist rendered-sst2; do + # if outputs/single_task_evaluation/vit-b-32/${TASK}/report.json exists, skip + if [ -f outputs/single_task_evaluation/vit-b-32/${TASK}/report.json ]; then + echo "Skipping ${TASK} because report.json already exists" + continue + fi + fusion_bench \ + method=dummy \ + fabric.loggers.root_dir=outputs/single_task_evaluation \ + fabric.loggers.name=vit-b-32 \ + fabric.loggers.version=${TASK} \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_individual \ + modelpool.base_model=tanganke/clip-vit-base-patch32_${TASK} \ + taskpool=CLIPVisionModelTaskPool/clip-vit-single-task_${TASK} +done + + +# Pre-trained ViT-B-16 +fusion_bench \ + method=dummy \ + fabric.loggers.root_dir=outputs/single_task_evaluation \ + fabric.loggers.name=vit-b-16 \ + fabric.loggers.version=pretrained \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch16_individual \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL20 \ + taskpool.base_model=openai/clip-vit-base-patch16 + +# Single-task evaluation of ViT-B-16 +for TASK in sun397 stanford-cars resisc45 eurosat svhn gtsrb mnist dtd oxford_flowers102 pcam fer2013 oxford-iiit-pet stl10 cifar100 cifar10 food101 fashion_mnist emnist_letters kmnist rendered-sst2; do + # if outputs/single_task_evaluation/vit-b-16/${TASK}/report.json exists, skip + if [ -f outputs/single_task_evaluation/vit-b-16/${TASK}/report.json ]; then + echo "Skipping ${TASK} because report.json already exists" + continue + fi + fusion_bench \ + method=dummy \ + fabric.loggers.root_dir=outputs/single_task_evaluation \ + fabric.loggers.name=vit-b-16 \ + fabric.loggers.version=${TASK} \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch16_individual \ + modelpool.base_model=tanganke/clip-vit-base-patch16_${TASK} \ + taskpool=CLIPVisionModelTaskPool/clip-vit-single-task_${TASK} \ + taskpool.base_model=openai/clip-vit-base-patch16 +done + + +# Pre-trained ViT-L-14 +fusion_bench \ + method=dummy \ + fabric.loggers.root_dir=outputs/single_task_evaluation \ + fabric.loggers.name=vit-l-14 \ + fabric.loggers.version=pretrained \ + modelpool=CLIPVisionModelPool/clip-vit-large-patch14_individual \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL20 \ + taskpool.base_model=openai/clip-vit-large-patch14 + +# Single-task evaluation of ViT-L-14 +for TASK in sun397 stanford-cars resisc45 eurosat svhn gtsrb mnist dtd oxford_flowers102 pcam fer2013 oxford-iiit-pet stl10 cifar100 cifar10 food101 fashion_mnist emnist_letters kmnist rendered-sst2; do + # if outputs/single_task_evaluation/vit-l-14/${TASK}/report.json exists, skip + if [ -f outputs/single_task_evaluation/vit-l-14/${TASK}/report.json ]; then + echo "Skipping ${TASK} because report.json already exists" + continue + fi + fusion_bench \ + method=dummy \ + fabric.loggers.root_dir=outputs/single_task_evaluation \ + fabric.loggers.name=vit-l-14 \ + fabric.loggers.version=${TASK} \ + modelpool=CLIPVisionModelPool/clip-vit-large-patch14_individual \ + modelpool.base_model=tanganke/clip-vit-large-patch14_${TASK} \ + taskpool=CLIPVisionModelTaskPool/clip-vit-single-task_${TASK} \ + taskpool.base_model=openai/clip-vit-large-patch14 +done diff --git a/examples/opcm/clip_gather_single_model_report.ipynb b/examples/opcm/clip_gather_single_model_report.ipynb new file mode 100644 index 00000000..c18416d3 --- /dev/null +++ b/examples/opcm/clip_gather_single_model_report.ipynb @@ -0,0 +1,1194 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import importlib\n", + "import json\n", + "import os\n", + "from collections import defaultdict\n", + "from pathlib import Path\n", + "\n", + "import matplotlib\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "from IPython.display import display\n", + "\n", + "from fusion_bench.utils.json import load_from_json\n", + "\n", + "from plot_utils import TASK_TO_LABEL_MAPPING\n", + "from plot_utils import v2_colors as COLORS\n", + "\n", + "plt.rcParams[\"font.family\"] = \"Times New Roman\"\n", + "plt.rcParams[\"mathtext.fontset\"] = \"cm\"\n", + "\n", + "matplotlib.rcParams[\"pdf.fonttype\"] = 42\n", + "matplotlib.rcParams[\"ps.fonttype\"] = 42\n", + "\n", + "PROJECT_ROOT = Path(\n", + " os.path.abspath(\n", + " os.path.join(importlib.import_module(\"fusion_bench\").__path__[0], \"..\")\n", + " )\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def gather_single_model_report(base_model: str):\n", + " result_dir = PROJECT_ROOT / \"outputs\" / \"single_task_evaluation\" / base_model\n", + " reports = defaultdict(list)\n", + " model_names = os.listdir(result_dir)\n", + " for model_name in model_names:\n", + " report_path = result_dir / model_name / \"report.json\"\n", + " data = load_from_json(report_path)\n", + " for task_name, task_report in data.items():\n", + " if task_name != \"model_info\" and task_name != \"average\":\n", + " reports[\"model_name\"].append(model_name)\n", + " reports[\"task_name\"].append(task_name)\n", + " reports[\"accuracy\"].append(task_report[\"accuracy\"])\n", + " reports[\"loss\"].append(task_report[\"loss\"])\n", + " return pd.DataFrame(reports)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "def get_pretrained_expert_accuracy(df: pd.DataFrame):\n", + " tasks = df[\"task_name\"].unique()\n", + " pretrained_accuracy = {}\n", + " expert_accuracy = {}\n", + " pretrained_data = df[df[\"model_name\"] == \"pretrained\"]\n", + " for task in tasks:\n", + " pretrained_acc = pretrained_data[pretrained_data[\"task_name\"] == task][\n", + " \"accuracy\"\n", + " ]\n", + " assert len(pretrained_acc) == 1\n", + " pretrained_accuracy[task] = float(pretrained_acc.values[0])\n", + "\n", + " expert_data = df[df[\"model_name\"] == task]\n", + " expert_acc = expert_data[expert_data[\"task_name\"] == task][\"accuracy\"]\n", + " assert len(expert_acc) == 1\n", + " expert_accuracy[task] = float(expert_acc.values[0])\n", + "\n", + " return pretrained_accuracy, expert_accuracy" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def plot_radar_chart(df, ax, colors=None, plot_legend=False):\n", + " \"\"\"\n", + " Create a beautiful radar chart.\n", + "\n", + " Parameters:\n", + " - df: DataFrame containing the data\n", + " - ax: Matplotlib axis object\n", + " - colors: Optional list of colors for different models\n", + " \"\"\"\n", + " # Get the task names (excluding the model_name column)\n", + " categories = [col for col in df.columns if col != \"model_name\"]\n", + " num_vars = len(categories)\n", + "\n", + " # Compute angle for each axis\n", + " angles = [n / float(num_vars) * 2 * np.pi for n in range(num_vars)]\n", + " angles += angles[:1] # Complete the circle\n", + "\n", + " # Set default colors if not provided\n", + " if colors is None:\n", + " colors = plt.cm.viridis(np.linspace(0, 1, len(df)))\n", + "\n", + " # Style improvements\n", + " ax.grid(\n", + " True,\n", + " linestyle=\"-\",\n", + " )\n", + "\n", + " # Draw axis lines\n", + " ax.set_theta_offset(np.pi / 2)\n", + " ax.set_theta_direction(-1)\n", + "\n", + " # Draw the outer circle more prominently\n", + " ax.spines[\"polar\"].set_visible(True)\n", + " ax.spines[\"polar\"].set_linewidth(1)\n", + "\n", + " # Plot data\n", + " for idx, (_, row) in enumerate(df.iterrows()):\n", + " values = row[categories].values.flatten().tolist()\n", + " values += values[:1]\n", + "\n", + " # Plot with enhanced styling\n", + " ax.plot(\n", + " angles,\n", + " values,\n", + " \"o-\",\n", + " linewidth=1.5,\n", + " label=row[\"model_name\"],\n", + " color=colors[idx],\n", + " markersize=2,\n", + " )\n", + "\n", + " ax.fill(angles, values, color=colors[idx], alpha=0.15)\n", + "\n", + " # Customize axis labels\n", + " ax.set_xticks(angles[:-1])\n", + " ax.set_xticklabels(categories, ha=\"center\", va=\"center\")\n", + " # Rotate angular labels for better readability\n", + " for label, angle in zip(ax.get_xticklabels(), angles[:-1]):\n", + " if angle in (0, np.pi):\n", + " label.set_horizontalalignment(\"center\")\n", + " elif 0 < angle < np.pi:\n", + " label.set_horizontalalignment(\"left\")\n", + " else:\n", + " label.set_horizontalalignment(\"right\")\n", + " # Customize y-axis\n", + " ax.set_ylim(0, 1) # Add some padding\n", + " ax.set_rlabel_position(0) # Move radial labels away from plotted line\n", + "\n", + " # Add legend with custom styling\n", + " if plot_legend:\n", + " legend = ax.legend(\n", + " loc=\"upper right\",\n", + " bbox_to_anchor=(1.3, 1.1),\n", + " frameon=True,\n", + " )\n", + " legend.get_frame().set_alpha(0.9)\n", + "\n", + " return ax" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "vit-b-32 results:\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
model_namemnistfer2013cifar10stl10oxford_flowers102emnist_letterssun397stanford-carsresisc45...svhngtsrbdtdpcamoxford-iiit-petcifar100food101fashion_mnistkmnistrendered-sst2
0pretrained0.48260.4125100.89830.971250.6644980.1197600.6317880.5958210.602698...0.3162650.3252570.4420210.6063540.8331970.63720.8236440.63010.09950.586491
1finetuned0.99580.7160770.97600.975500.8855100.9561540.7486150.7852260.951429...0.9726870.9890740.7968080.8796080.9245030.88380.8840790.94750.98230.712795
\n", + "

2 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " model_name mnist fer2013 cifar10 stl10 oxford_flowers102 \\\n", + "0 pretrained 0.4826 0.412510 0.8983 0.97125 0.664498 \n", + "1 finetuned 0.9958 0.716077 0.9760 0.97550 0.885510 \n", + "\n", + " emnist_letters sun397 stanford-cars resisc45 ... svhn gtsrb \\\n", + "0 0.119760 0.631788 0.595821 0.602698 ... 0.316265 0.325257 \n", + "1 0.956154 0.748615 0.785226 0.951429 ... 0.972687 0.989074 \n", + "\n", + " dtd pcam oxford-iiit-pet cifar100 food101 fashion_mnist \\\n", + "0 0.442021 0.606354 0.833197 0.6372 0.823644 0.6301 \n", + "1 0.796808 0.879608 0.924503 0.8838 0.884079 0.9475 \n", + "\n", + " kmnist rendered-sst2 \n", + "0 0.0995 0.586491 \n", + "1 0.9823 0.712795 \n", + "\n", + "[2 rows x 21 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "vit-b-16 results:\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
model_namemnistfer2013cifar10stl10oxford_flowers102emnist_letterssun397stanford-carsresisc45...svhngtsrbdtdpcamoxford-iiit-petcifar100food101fashion_mnistkmnistrendered-sst2
0pretrained0.51730.4639180.90770.98250.7131240.1243750.6553650.6468100.663810...0.5198990.4345210.4500000.5402220.8844370.66330.8701390.67300.11210.605711
1finetuned0.99700.7276400.98280.98150.9487720.9528370.7892190.8589730.965556...0.9760680.9898650.8234040.9055480.9449440.88780.9186530.94530.98100.757276
\n", + "

2 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " model_name mnist fer2013 cifar10 stl10 oxford_flowers102 \\\n", + "0 pretrained 0.5173 0.463918 0.9077 0.9825 0.713124 \n", + "1 finetuned 0.9970 0.727640 0.9828 0.9815 0.948772 \n", + "\n", + " emnist_letters sun397 stanford-cars resisc45 ... svhn gtsrb \\\n", + "0 0.124375 0.655365 0.646810 0.663810 ... 0.519899 0.434521 \n", + "1 0.952837 0.789219 0.858973 0.965556 ... 0.976068 0.989865 \n", + "\n", + " dtd pcam oxford-iiit-pet cifar100 food101 fashion_mnist \\\n", + "0 0.450000 0.540222 0.884437 0.6633 0.870139 0.6730 \n", + "1 0.823404 0.905548 0.944944 0.8878 0.918653 0.9453 \n", + "\n", + " kmnist rendered-sst2 \n", + "0 0.1121 0.605711 \n", + "1 0.9810 0.757276 \n", + "\n", + "[2 rows x 21 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "vit-l-14 results:\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
model_namemnistfer2013cifar10stl10oxford_flowers102emnist_letterssun397stanford-carsresisc45...svhngtsrbdtdpcamoxford-iiit-petcifar100food101fashion_mnistkmnistrendered-sst2
0pretrained0.76310.4995820.95590.9936250.7924870.1234130.6822170.7786340.713333...0.5843190.5052260.5553190.5120540.9321340.75050.9118020.66960.09710.689182
1finetuned0.99760.7592640.99130.9922500.9767440.9542790.8276070.9277450.973810...0.9792180.9923990.8547870.9113160.9574820.93000.9477230.95280.98300.804503
\n", + "

2 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " model_name mnist fer2013 cifar10 stl10 oxford_flowers102 \\\n", + "0 pretrained 0.7631 0.499582 0.9559 0.993625 0.792487 \n", + "1 finetuned 0.9976 0.759264 0.9913 0.992250 0.976744 \n", + "\n", + " emnist_letters sun397 stanford-cars resisc45 ... svhn gtsrb \\\n", + "0 0.123413 0.682217 0.778634 0.713333 ... 0.584319 0.505226 \n", + "1 0.954279 0.827607 0.927745 0.973810 ... 0.979218 0.992399 \n", + "\n", + " dtd pcam oxford-iiit-pet cifar100 food101 fashion_mnist \\\n", + "0 0.555319 0.512054 0.932134 0.7505 0.911802 0.6696 \n", + "1 0.854787 0.911316 0.957482 0.9300 0.947723 0.9528 \n", + "\n", + " kmnist rendered-sst2 \n", + "0 0.0971 0.689182 \n", + "1 0.9830 0.804503 \n", + "\n", + "[2 rows x 21 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "for base_model in [\"vit-b-32\", \"vit-b-16\", \"vit-l-14\"]:\n", + " df = gather_single_model_report(base_model)\n", + " df.to_csv(f\"results/{base_model}.csv\", index=False)\n", + "\n", + " pretrained_accuracy, expert_accuracy = get_pretrained_expert_accuracy(df)\n", + " data = defaultdict(list)\n", + " data[\"model_name\"].append(\"pretrained\")\n", + " for task in pretrained_accuracy.keys():\n", + " data[task].append(pretrained_accuracy[task])\n", + " data[\"model_name\"].append(\"finetuned\")\n", + " for task in expert_accuracy.keys():\n", + " data[task].append(expert_accuracy[task])\n", + " df = pd.DataFrame(data)\n", + " print(f\"{base_model} results:\")\n", + " display(df)\n", + " df.to_csv(f\"results/{base_model}.csv\", index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "vit-b-32 results:\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
model_namemnistfer2013cifar10stl10oxford_flowers102emnist_letterssun397stanford-carsresisc45...svhngtsrbdtdpcamoxford-iiit-petcifar100food101fashion_mnistkmnistrendered-sst2
0pretrained0.48260.4125100.89830.971250.6644980.1197600.6317880.5958210.602698...0.3162650.3252570.4420210.6063540.8331970.63720.8236440.63010.09950.586491
1finetuned0.99580.7160770.97600.975500.8855100.9561540.7486150.7852260.951429...0.9726870.9890740.7968080.8796080.9245030.88380.8840790.94750.98230.712795
\n", + "

2 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " model_name mnist fer2013 cifar10 stl10 oxford_flowers102 \\\n", + "0 pretrained 0.4826 0.412510 0.8983 0.97125 0.664498 \n", + "1 finetuned 0.9958 0.716077 0.9760 0.97550 0.885510 \n", + "\n", + " emnist_letters sun397 stanford-cars resisc45 ... svhn gtsrb \\\n", + "0 0.119760 0.631788 0.595821 0.602698 ... 0.316265 0.325257 \n", + "1 0.956154 0.748615 0.785226 0.951429 ... 0.972687 0.989074 \n", + "\n", + " dtd pcam oxford-iiit-pet cifar100 food101 fashion_mnist \\\n", + "0 0.442021 0.606354 0.833197 0.6372 0.823644 0.6301 \n", + "1 0.796808 0.879608 0.924503 0.8838 0.884079 0.9475 \n", + "\n", + " kmnist rendered-sst2 \n", + "0 0.0995 0.586491 \n", + "1 0.9823 0.712795 \n", + "\n", + "[2 rows x 21 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(4.5, 4.5)\n" + ] + }, + { + "data": { + "image/png": "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kODgYD766CMSExP59ttv6XIn1Li6uLi4NH8Rk50NP/wgve/VCzw9a9/W4MFSvpicHNi6VUqG10zJyMhAo9HUKNTdzMyMGTNmcOnSJc6cOUOvXr14//338fDwYNKkSVy/fr0Be1y/hIWFcfnyZR566KEKtwkMDKxxpNaHH35YZtnPP//MqFGjmDx5MkZGRqxfv77a7ekevnr16lXtfS5evIharcbBwUG/zNTUFGtray5evFjtdmTqF1nE/MfYu3cvzz33HIsWLaryaScoKAg/Pz+++eYb/TKVSsXhw4cJqiKs1dnZme+//56YmBimT59eoz4OHz6c1atXk5+fz+TJk7nvvvs4c+ZMjdq4F8jPz+frr7/Gx8eHSZMm6c1w4eHhzJs3Dysrq1q16+LiQlpaWvN1ChVCmjXJzwcnJ+jXr27tGRnB449L+WKCg+Gff+qlmw2BzpSkrGVumx49erBz505u3brF66+/zr59+2jbti1PPPEE586dq+fe1j83btwApMKadeWJJ55g5MiRdOrUiZ07d5ZZv3PnTp566imcnJwYNWoUmzZtqpYpbtOmTWzZsoXZs2fTu3fvavdHNzNmf1cCRisrqzKBDjKNhyxi/mO4u7tjamrKyJEjuXXrVqXbKhQKZs6cyfnz5/nnzsCwe/duRo0aVa3if/379+e9995j+/btrF27tkb9nD59OpcvX2bgwIGcPXuWXr16sWTJkhq10VzJzMzkww8/xNPTk1deeYWuXbty4cIFDh8+zMMPP1znwopmZmbY2to239mY48chNFQKjx41SvpbV1xcoG9f6f2uXVL9pWaGEIKEhIRqmZKqwsHBgffff5+4uDg+//xzzp49S48ePRg8eDCHDx/Wz142N3JycgDqJXfRjz/+yJ49ezh//jzdu3cvtS4yMhIPDw+9j8zzzz9PYmIi+/btq7C9V155hdatWzNnzhyOHDnCsmXLatQf3e/2br8cjUYjl51oQmQR8x+jW7du/PzzzyQlJTFkyBDS09Mr3X7ixIlYWFjof9CbNm1i0qRJ1T7e22+/zZAhQ5gzZw4hISE16mubNm34448/+OGHH7C1teXtt9/m0KFDNWqjOZGUlMQbb7yBh4cHixcvZujQoYSGhrJ3794am4yqwtXVlYSEhHpts164fRt++kl637+/NBNTXzzwgJQvprgYNm2Swq+bEVlZ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ATple8011+Dq6sp7771HZWWlPnuokbq6On3wEOhSuq655ho++ugjfTra77//zuDBg/Ut0RutLfX19frt7r77bhwdHXn44YdJSkqitraW3bt3A7oA2sbKhLW1tSiVymZzaNx/S8svXnbx3Ovq6lp9r+nYLfHCCy+Qnp7OVVddxUcffcTSpUs5cOCAPvDZ0tKS8+fPk5mZafBKv46OjkybNq3rAdCjRsHgwboqvj/9pPOHdwE7S0vc7O0514PWmJZwsZIzZ4gFX99hz56HnHhhkgX2Zhoas2gAtCKotaDSglID9RqoV0OdGupUujviGiVUK6GqXqSyXqRCoXuU1ekepXUiJbUixbUiRTUihdW6OisF1SJ5VVryqrTkVmrJqdCSXaElq0JLZrmWjHIt6WVa0kq1pJZqSSnVNggY9PMLczPi27vs2fewE69NsyEqyLRZpVZrc3NG9O/PmNBQyqqr2RUTw/mcHJRtpGmq1GqKKipwN2D6aWt42srZeJcD1wabohHhs6N1vH+wBmUbcTKNLqWy6rJW1xFFkaraKi5kXyA5JxlbK1vCA8JxsXdpV40ZVwdXTIxNyCzs3ti19iKKIp8fqSW74h8BIyJgoskhq8k5ukc4d65NV1JtbS3p6emEhob27Lwuw59//klRURFz5szplvFPnjzJ4sWLm5Ue2bhxI6NGjWLUqFH6ZcuWLSMhIYEvvvhCv0wURb7//nv++usv/TWwkdauQR988MElWV+rVq3ir7/+0o/5yiuv8P77718i2lQqFQsXLmTGjBk8+eSTLR7Pli1bDB783Fk6HHggCAJr165l48aNzJ07Fzc3NzQaDWVlZSxbtkyfd75582Yef/xxvv32W0CXvuXk5MSnn36KtbU1y5Yt488//+T777+nqKiIt99+m2nTpjFw4EA2bdrEE088QVRUFEOGDEEURbZt24ZMJiM2NpYNGzYAsGjRIpYuXYq7uzv29vZs27aNBx98kEGDBhEVFcXo0aMZPnw4ubm5FBcXs2bNGmJjYwF4++23mTNnDmfPnuXDDz/ULwNdvZsff/zxknU9G6wMKSkpfP/99xQWFrJv3z6++uorZs2ahZ2dHQBHjhzRp5199dVXuLq6ctttt11yB3n99dfz+eef8+abb7Js2TJuuummZulqTz75JM8++yympqYt+je7yn333ceNN97YolWt3QgC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/fr1AOzdu5cnn3ySI0eOYGVlhUaj4dlnn+W3334jOTlZv80LL7zA//3f/1FRUaFvXLls2TKysrJYs2YNgiBQWlrKzTffTGBgIF9++aV+27179zJ79mw+/PBD7rzzTv3yY8eOMXXqVD744INLxMqhQ4eYMGEC99xzzyUiZ+HChc3OD5MnT2bgFVZF+0pCssRIdImWmijKZDKefPJJ3njjDTZv3sx7771HYGCgXsC0hK2tbbPiWi2NO3nyZLZs2cK5c+e49957DXMA7WDgwIEcPHiQb775hri4OCIiIrj77rvJzc01/M5GjwYXF11zyMukfGu1WvLLyqSspF6msfu3wVxKoqgL2v3iC52AMTWFO+6Ahx5qU8CIosimTZsIDg7mscceIyoqisTERF588cUeETBw6e9WJpOxbNkyAD788EP9cvM2xF5TIfHll18yZcoUfdVguVzOe++9R2hoaLNtzBrEftP9r169mlmzZuljxRwcHNiwYQNGTYRyXl4et956K3Pnzm22X4CRI0fy2WefXTI/pVLJ+++/z8jGYPwmpKenY2dnx5NPPql/SAKme5FEjES3sWjRIpydnXn//fcZPXr0ZdefMGHCZdcZM2YMM2bM4I8//iAhIcEQ02wXgiAwZ84cUlJSeOONN/j9998JDAzk8ccfp7y83HA7ksvhxht1z48f16XPtkJxZSVyuRx7qSx8r9OYpdRlKip0adM7doBaDYGButiXMWN0afitsGfPHoYMGcLs2bPx9vbm2LFj/PDDD93mOuoI7g0d1Uva6XJr6n5RKBT88MMPZGVl6ZcJgsB111132XEUCgUrV65sVjLBy8uLwU26xv/f//0fpaWlPPLIIy2Occstt1zyGb799ts88cQTLQrD9957jzVr1jBnzhxOnTp12TlKdB1JxEh0G6ampkyaNIm8vDyD/qCnTZsGwB9//GGwMduLubk5zz33HGlpaTzxxBOsXr0aPz8/li9fbrhYnYEDISBAF9y7d2+rq0lZSX0HN3t7Kmtrqe1sjSFRhJgY+PxzyMjQZardfDM88QS0YWk7deoUEydO5OqrrwZgx44d7N27lxEjRnRuHt3AiRMnABg1atRl112+fHmz1/PnzycrK4vIyEjWrl2rT2VfuHDhZce677772L59O8OGDWtWyLLptps2bcLLywu/VooDGhkZMakx4B64cOEC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H374gaqqKv1748ePv+z+Gn9TEhKGRhIxElc8GRkZHDhwgHHjxmHUUhfkBoYMGdKhcefPn09WVhaRkZGsXbsWsSEGfuHChZfd9sSJExgZGTFs2LB27evcuXNYW1tLJ3sJli9fDsDPP/+Mh4cHEydOBCA1NZU77rgDQRBIT0+npKSEt99+G39/f/7++28GDx7MwIED0Wg01NfX8+KLL/Lss88yY8YMbrnlFnJzc/X76Oh3++uvv+a+++7jwQcfpKamhu+++657PwQJiXYiiRiJK574+HhEUcTb2/uS95KTk1m2bBmzZ89m7ty57N69u93jzpgxgy+++ILa2lrmz5/PyJEjOX78eJvbqNVq3njjDQ4ePMiKFSvw8/O77H7279/P/v372b59O05OTu2en8S/g7Vr1zJv3jzmzZvHyJEjWbduHQCzZs3i6quv1q8XEBDA/fffr3+tUqlQqVSkp6ezefNmlixZwtixY5HL5cydOxcvLy/eeecdtm7dCsCUKVP0BQE7+t0+dOgQkyZNIjIykpEjR17iUpKQ6DV6OSZHQqLLfPvttyIgPvHEEy2+n5+fLwLiwoULL3nv4sDeljh37pw4efJkERBlMpn4xhtvXDKGubm5+OSTT4qurq6in5+fGBsb2+JYy5YtEwHxpptuEu+9915xxIgR+nFvvvlmfaClxL+ftLS0SwJ76+vrxVmzZulfz507V5wwYYL+9b59+0RATEtLE0VRF6ALiDExMfp14uLiREDMzc3VLzt16pQIiOvWrWs2h8t9txv3+cknn+hfr127VgRa/Y5zUWCvhER3IlliJK54GoMGW0sNdXV1Bei0laN///7s3r2b7777Djs7O5YsWcLOnTubrSOTyfjggw947rnnSE9PJy0trc0xf/jhB7766iuOHTvG8ePH8ff356effuKDDz7o1Bwl/h2YmJgwbdq0dq8vk+lO4ba2tvpl+/btu2TZoEGDMDIy4sSJE822b893e926dRw+fFhvLdq5cydmZmasXr26w8cnIWFoJBEjccUzbNgwPD092bt3L9XV1QYb9+uvv272evbs2XrT/G+//dbiNosWLWLKlCksWLCA/Pz8du1n+PDhfPLJJwAcO3asCzOW+DewYMGCLm0vNsS3FBQU6JfJZDKcnZ0xNjYG2v/dLi4uxtjYmO+//55169axbt06vv32W+bMmcPG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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "vit-b-16 results:\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
model_namemnistfer2013cifar10stl10oxford_flowers102emnist_letterssun397stanford-carsresisc45...svhngtsrbdtdpcamoxford-iiit-petcifar100food101fashion_mnistkmnistrendered-sst2
0pretrained0.51730.4639180.90770.98250.7131240.1243750.6553650.6468100.663810...0.5198990.4345210.4500000.5402220.8844370.66330.8701390.67300.11210.605711
1finetuned0.99700.7276400.98280.98150.9487720.9528370.7892190.8589730.965556...0.9760680.9898650.8234040.9055480.9449440.88780.9186530.94530.98100.757276
\n", + "

2 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " model_name mnist fer2013 cifar10 stl10 oxford_flowers102 \\\n", + "0 pretrained 0.5173 0.463918 0.9077 0.9825 0.713124 \n", + "1 finetuned 0.9970 0.727640 0.9828 0.9815 0.948772 \n", + "\n", + " emnist_letters sun397 stanford-cars resisc45 ... svhn gtsrb \\\n", + "0 0.124375 0.655365 0.646810 0.663810 ... 0.519899 0.434521 \n", + "1 0.952837 0.789219 0.858973 0.965556 ... 0.976068 0.989865 \n", + "\n", + " dtd pcam oxford-iiit-pet cifar100 food101 fashion_mnist \\\n", + "0 0.450000 0.540222 0.884437 0.6633 0.870139 0.6730 \n", + "1 0.823404 0.905548 0.944944 0.8878 0.918653 0.9453 \n", + "\n", + " kmnist rendered-sst2 \n", + "0 0.1121 0.605711 \n", + "1 0.9810 0.757276 \n", + "\n", + "[2 rows x 21 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(4.5, 4.5)\n" + ] + }, + { + "data": { + "image/png": "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224znX+H4+0N8+bBU09BSAgYDHDoEHz0Efz559+VgGsI8vRkcPfunM/MJDYpCWNNFs7xxESigoOvmfiS7KIifGVXUr14ubhQrtV2epdSLZHBwegNBs5nZABSfaK9Z85gZ23N9T17tl1s1rFj0vfD27vZnaqbwrPPPsv27dv56quviG5BCYCrcf78eWJjYxk2bFiD23Tv3h1/f3+OHz/O7bffzgsvvMCgQYN4/vnnAan43ieffEJkZCSbN2/mhhtuIDAwkKKiIn7++WeeeOIJHn/8cRwdHRt158u0DlnEtDOlpaW89NJLODs7s2DBAi5cuICzszOWzfyx2b9/P6NHj6Z3794MGjSoUZcSwCOPPEJycjK//fabadnatWu56667WnQezcXS0pIff/wROzs7JkyYQHl5ebsct0mEhMCTT0qCxtsbqqrgjz/gf/+D48clk3kNbg4ODI+MpFij4UBcHEfOn8fNwaHlTfPamdoGkD6urh09lU6JhVKJp7Mz2deINUapUNC/SxcSsrI4nZzMn3FxhHl70zcsrO2sgnq9lPUHUoyZmcXw2rVreeedd3jllVeYMmWKWceu5cKFCwB4eXldddupU6cyZswYXn31VV555RVef/114uLi0Gq1WFtbc/bsWb799luefPJJRo4ciUql4oknnuCDDz7gww8/5KuvvmqTc5CRkEVMO7FlyxaWLFnCAw88wODBgzl9+jT+/v6UlZU1W8Ds2bOHMZf0JnnwwQc5evRooxlI06dPx9PTs84dwcaNG5k2bVrzT6aFeHp6smnTJtLS0pg+fXrnygIRBMm19PzzcOedkstJo5FaGnzyCcTHS24npHiE63v2RCEIFGk0za7X0ZEUlJaiVCo7dS2UjuZacimBJGRsLC1Jzs2lb3g44b6+bWtlO3UKysulth79+5t16KNHjzJv3jymTZvGokWLzDr2pdS635vy2zt58mRGjhwJSMkKIFUmd3NzM7U9mD59OhMmTGDt2rXo9XrS0tJ45513TK1YLo+5kTEfssOvnZgwYQJz5869YnlAQADp6ekYDIYmV6Bcs2YNWq2WY8eOAVBdXY21tTUrV65sMHjW0tKSuXPn8vrrr3P+/HkyMzMZOnSo+RszXoXevXuzdu1abrvtNh577LHOZ2atTcvu1+/vbtm1admXdMuuLXUfFRxMYnY2uWo1fcLCsG+D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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "vit-l-14 results:\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
model_namemnistfer2013cifar10stl10oxford_flowers102emnist_letterssun397stanford-carsresisc45...svhngtsrbdtdpcamoxford-iiit-petcifar100food101fashion_mnistkmnistrendered-sst2
0pretrained0.76310.4995820.95590.9936250.7924870.1234130.6822170.7786340.713333...0.5843190.5052260.5553190.5120540.9321340.75050.9118020.66960.09710.689182
1finetuned0.99760.7592640.99130.9922500.9767440.9542790.8276070.9277450.973810...0.9792180.9923990.8547870.9113160.9574820.93000.9477230.95280.98300.804503
\n", + "

2 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " model_name mnist fer2013 cifar10 stl10 oxford_flowers102 \\\n", + "0 pretrained 0.7631 0.499582 0.9559 0.993625 0.792487 \n", + "1 finetuned 0.9976 0.759264 0.9913 0.992250 0.976744 \n", + "\n", + " emnist_letters sun397 stanford-cars resisc45 ... svhn gtsrb \\\n", + "0 0.123413 0.682217 0.778634 0.713333 ... 0.584319 0.505226 \n", + "1 0.954279 0.827607 0.927745 0.973810 ... 0.979218 0.992399 \n", + "\n", + " dtd pcam oxford-iiit-pet cifar100 food101 fashion_mnist \\\n", + "0 0.555319 0.512054 0.932134 0.7505 0.911802 0.6696 \n", + "1 0.854787 0.911316 0.957482 0.9300 0.947723 0.9528 \n", + "\n", + " kmnist rendered-sst2 \n", + "0 0.0971 0.689182 \n", + "1 0.9830 0.804503 \n", + "\n", + "[2 rows x 21 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(6, 4.5)\n" + ] + }, + { + "data": { + "image/png": "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ztm1ukURgnBA5+wyiMjpNBoisRiiuHTf1+nQLrXx9Axiz2g0pj0y+NZbb/HJT34SQRA4/vjjufbaa5PnuiOOOIINGzawY8eO5DabN2+ecX/nnHMOgiDw+c9/nq1bt/LjH/+YrKwszGbzpPOPz+fjgQceIDs7myuvvJK3336bN954g4svvhhBEFi/fj2PPfZYcvs33niDc845hwsvvJCaGnmCz4F10KeccgpFRUV89KMf5cwzz0QQBKqqqjjzzDM5/vjjUalUPPDAA2l9/TIsjCWNDP7oRz/iJz/5Cc8++yzr169P3n7ffffx61//mq9//et873vf47e//S3HHXccN954IwDXXXcdjY2N/O///i+/+93vJnzovvSlL006TkdHB4888gjnnHMOV1xxxYT7NBoNV155JTt37uSHP/whL774IiqViu7ubo444ghOPvlk6uvrJ0TX+vv7efLJJ/n1r3/NJZdcMul4O3fu5IorrmDPnj04HA6+8IUv8JWvfIWf/OQngFw/d+6553LNNddw0003sW3bNs444wz27NkztyjeLCSuVOe0z0UaRSdK0qSC/jUFampzVTQMxXhxX5hLNsycekwXy00MLie/wxzb7DZESoUSu9mO3WxP1tw5vU6ae5pRKBTJGkOT3pQUWgpBQXFOMRaDhfb+djwBD6V5pVQUVNDY1YjZYMZsNOP0OpNrcPvdVBVW0THQgUlvwmF14Pa5k+PnqgqrJvn6RWNRuQPYK88B1mv12Mw2inOLU655lCSJhqE4TzXnsfONMOH4+Dg+BZxUKVvCHF+uQbmE4xSXm79faLH9/VJAOV5HuuikIAYNBkPaI4PHHXccdrudhx56iOuuu44bbrgheV80GuUzn/kMGzZs4Oc//zkPPfQQ27Zt46233uK4446btK+2tjZeeOEFAP7nf/4Hk8nEiSeeyIYNGzjttNO47LLLePvtt9GOv6cmk4lrr72W559/njvvvDNpmeNwOHjiiSe4/vrr2bJlCwANDQ1cffXVvP322+Tn5yNJEnfffTdf/epXk8dfsWIFzz77LMbx11IQBC6//HK+973vAfD0008zNjaW1tcvw8JYssjgCy+8wG233cZ99903QQgCfPrTn+bTn/508v91Oh0Gw8SIhW6adMkXvvAF9Ae1///mN7/BYrHw29/+dtr1HLz/kpISbrzxRnp6enj8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xRdfZNmyZSQlJfHwww9z1llnoet2efjxxx955pln+Pzzz/nnP/9JdHQ0b7zxBp9//jlXXnklL7zwQo/zbdiwgaeffpovv/ySf/7zn5x99tlERETw/PPP849//AOz2czpp5/OM8884zsHQHl5OXfccQcxMTEUFRWxdOlSjj/+eN/jV1999UHnAnj66ae54YYb/PJayYwNwxKDf/7zn/nmm2/4+uuvien+xtbS0sIJJ5zADz/8wNNPPz3oY7W1tXH66adTUlJCUFAQJ554Ip988smIxaBarcZms9Ha2gpAUlISt912G++//z4Oh4ObbroJgOTkZARB4Pvvv+emm27ixBNPBOh126ioKHbt2kV8vFQflZGRwZFHHsmbb74JwJYtW/jiiy+YO3cuer2e//73v9xzzz1cccUVmM1mFi1axPz589mwYQN5eXmDeh47duxgypQpI3otvEyYMIGJEyfy2muvERUV5evIi42NRbFzJxQV7du4vp6FJwVOBHqJDA0lRKOhrq2N9Lg4glQQpBofNTodZjNrdhVx1ORClMqgg6KfPSKfbhFnt+i0u0XsLpHGjk4211jY3CTN6hVFKEgITARNoVCQkZBBU0cTe6r3HJS2rG2pRVAIIxo3dyAOpwOLzUJOco7fjjkcBEHwGVD7y95GrVKTkZBBeX05umCdb1ydy+2ior4Ch8tBXnpeQP0BBUEgRh+DLlgnjbLrMg3bk7CxrZEQbYhfhau3XlAXJAx7VrkoilQ2NzMppZfJNXb7voa2AWoGh0NoaCgTJkxgwoQJdHV10dDQQG1tLd9//z27du3ir3/9q9/O9fe//52amho+++wzBEGgvb2ds88+2/f4tGnTePjhh1m2bBnnnnsul1xySY/9jzzySCIjI3G73fzxj38EYPHixSxcuJDly5dz7LHHcu655/q2P/zww7nzzjtxuVxcfvnlAHzyyScYDAY+//xzvvjiC+644w4SEhJ46KGHAMlK5/jjj+ett95i9uzZlJSUcNhhh7FmzRqmT5+O1Wpl06ZNPPbYY0TtJ85vueUWTjnlFL+9VjJjw5CvTC+99BL/+te/2Lp1q08IAsTGxvLyyy8zffp0pkyZwpVXXjmo43322WcAvm8n33777VCX1CuJiYm9iiitVntQAbFWK33Qh4SE9LvtGWec4ROCvTF9+nQ6Ozt7PVZoaCj33HMP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+fLlvg9Zj8fD008/za233srZZ5/NO++8w2uvvUZSUhLHH388AJdddhnffPMNtbW1gHThuvnmm3n55ZcByRPw+OOP58033/Sd69tvv+W8884jLi6O1atXExsbOyrPcceOHVx77bX8+OOPnHDCCTzxxBP+s97o6ICHHpI6iwsLYYiTUTaXlhKkVlOQnu6f9YwBv8YJJPvjdLn4atMmFhYWBs7ax2SSUsI7d0q/BwXBCSfAMcccNNHG7Xbz3HPPcd9999HV1cVdd93FLbfcgkajCcza9uPAzwOPx8Oll17Km2++yYcffsiZZ54JgNVqJSQkhDvvvJMHHnigxzF+//vf8/rrrwPw3XffcdNNN7F27VpCQ0Nxu938+c9/5tNPP6W0tNS3z9KlS3nkkUcwGo2Eh4cDcO+991JTU8NLL72EIAi0t7dz9tlnk52dzYsvvujb97vvvuP888/nySef5MILL/Tdv379ek488USeeOKJg0TfDz/8wNFHH83vf//7g8Ti1Vdf3ePzYdGiRUz5lU0FkvntIUcGZUZEbzN+FQoFN910Ew8++CDvvfcejz32GNnZ2T4h2BsRERE9TG57O+6iRYv45JNP2L17N3/4wx/88wQGwZQpU1izZg1vvvkm27dvp7CwkEsuuYR6f3gFRkbuM6Tevh02bx70rh6Ph8aODrmLeIxRq1TERkQEJlXsckl1pcuW7ROCs2ZJdYEnnNBDCIqiyDvvvENubi433HADCxcupLi4mNtvv31UhCAc/HerUCi49957AXjyySd99wf3I5r3F2Qvvvgixx9/vG8KilKp5LHHHiM/P7/HPtruOdn7n3/58uWcddZZvlraqKgo3njjDVT7feFoaGhg8eLFXHrppT3OCzB79myee+65g9bncDh4/PHHmT179kGPVVZWotfruemmm3z/ZCEo82tAFoMyAePmm28mNjaWxx9/nLlz5w64/dFHHz3gNvPmzeOUU07hiy++oKioyB/LHBSCIHDRRRdRVlbGgw8+yGeffUZ2djZ/+tOfMBgMIzv4pEmSBxzAV19JUyMGQWtnJ0qlkkh5XNiY4+0q9huiKDUWPfccfPedVEKQmgq33QaXXQYRET02//bbb5kxYwbnn38+qamprF+/nnfffTdgKeGhkJiYCEDbIFPp+6dVbTYb7777LjU1Nb77BEHgd7/73YDHsdlsLFu2rIdVVEpKCtOnT/f9/sgjj9De3s51113X6zHOOeecg17DRx99lBtvvLFXgf3YY4/x0ksvcdFFF7F5CF/sZGTGGlkMygQMjUbDMcccQ0NDg18/GE866SQAvvjiC78dc7AEBwfzl7/8hYqKCm688UaWL19ORkYG991338hqGU84ASZP3mdIPYhjyV3E44eEyEg6u7ro8odHZWsrvPUWvPMOGAwQFgYXXQR//jNkZPTYdPPmzSxYsIBjjz0WgJUrV/Ldd99x+OGHj3wdfuKXX34BYM6cOQNue9999/X4/fLLL6empoZp06bxyiuv+Cx8rr766gGPtWTJEr766itmzZrVw1B+/33feecdUlJSyDjgdfWiUqk45phjfL/v3buX+vp6FixYcNC2oijidDrJz8/nvffe4/DDD+81sigjMx6RxaBMQEnvrmWrrq4e18ccKpGRkTz88MOUlpayePFi7r//frKysnj88ceHZ1qtUMCll0JUFHR2wocfStGhPhBFkYb2djlFPE4IUqmICQ+nfphd4QDYbLByJfz731BRAUqlVBN4zz0wZ04Pq5jt27dz+umnM2vW/7d331FRXHscwL/LLr0IiFGaClgjKggEUIlgwQaaqCAKimBBfYlHczTnKFFjJU/jS/L0WRAUjAhKbGgsKIJgQ+QIiIglNpSgsksNffe+P9YdXQFZRZTy+5wzx8ydmTszm4H9ce/c37VFTk4OIiMjkZqaCldX12b1x0F2djbmz5+Pnj174scff6y1/dixY9wAEhcXl1rBoJubG3bs2IGysjL4+/vD3t4eV69eVejcQUFBmD17Nm7evAknJydMmTIFT58+5baXlJQgLy8PHTt2VPh+li9fjjVr1tS5jcfjYfv27UhMTMTdu3cxaNAgfPPNN1wwTEhzRsEgaVKyL6YPOU6pKep8X8bGxti5cyf3hbN48WKYmprixx9/RHFx8btVpqEhHRkqEAD37wPnz9e7q7C4GDweD+21tRt5B+RDee9RxRIJkJoKbNkCXL0qXf/8cyAwEJgwQZqo/KVLly7B1dUVVlZWSElJwZYtW3Dr1i14eXlBSan5/Drfv38/Ro8eDUtLS0yYMIHL3/kmd3d3hIWFISwsDOfOnYObm1utfebMmYP09HQMGzYMKSkpcHR0xPr16xu8BoFAgODgYJw6dQrdunVDVFQULC0tcfr0aQDSYBCAwil29uzZAzc3N7RXII1Tly5d8Oeff8LCwgI7d+5UqH5CPqXm89uDtEqy1jtzc/NmXWdj9ezZEwcOHEBWVhbc3Nywbt06mJqaYtGiRXjx4oXiFZmYAJMnS/87KUmaTLgOuSIROunpNatWoLbOUF8fhaWlKH+XnJQ5OUBICHDihPTVgA4dgHnzgPnzgc8+AyD9o+fEiRNwdHTEoEGDcP/+fQQHB+PBgweYP39+s8wXOHLkSERGRsLY2BixsbEKXSOPx8O4cePq3NajRw+cPXsWkZGR0NXVRWBgIGJjYxW+lszMTKxYsQLFxcXw8PBAfn4+OnToAFVVVTx79qzBOoRCIU6ePAkfHx+FzgkAWlpaWLBgAR4+fKjwMYR8KhQMkiZTXV2N+Ph4GBsbf9CZDmR/2cveHWxOevXqhd27d+P+/fvw8/NDcHAwOnfuDH9/f8VnM3F0lC4AcPiw9L2x11AXcfOkqqyM9jo6+FuRgSTFxdK5qcPCgGfPAFVV4KuvgB9+kL47Culo8cjISPTv3x9jx45FeXk59u/fj9u3b2PWrFkfbYTw+9LV1cXevXuRmppaZxdxXd7MARgeHi637uXlxeX7jImJeWtdrx+rqqqKVatWYe3atSgpKUFCQgKUlZXh4uKC+/fvcymu6lJTU4Pjx48jKipKLn/g+fPnER4eDh6PV2/AZ25uDhMTk7deJyHNAQWDpMn873//Q15eHpYvXw4+n/9B6rx27RqOHj0KLy+vD5frrwmYmpri119/xaNHj7BkyRIcOnQI3bp1g7u7O86fP99wF7enp7SVsKICiI6Wphh5qaC0FGKJBAYv86mR5sNQX//twWBNDZCYKE0VIxsN7+AA/PgjMHw4wOejuLgYQUFBMDc3x9SpU6Grq4uTJ0/i+vXr8PT0/GA/Sx+Dk5MTli1bhp9++glJSUkKHyfLN5qUlIT8/Hy5bY6OjtDS0kKnN5Jsv+nw4cO1ymTprWTHLl26FDweD0FBQXXW8ezZMxw6dAju7u64fv263GJjY8OVGxkZ1Xl8amrqR02DRcj7omCQNEpZWVmd5bt27cKSJUvw7bff1jnyr7y8/K2jb+uqNzk5GePGjYOjoyO2b9/+/hf9ERkYGGD16tXIycnBxo0bkZWVBWdnZ/Tp0wdbtmyp9/ODsrL0/UF1dSAvT5py5qVckQid9PWb1TtiRMpQXx/CkhJUvjmbDGPArVvA1q3Sd0FraoAuXYDvvwd8fABtbWRkZGD69OkwMjLC8uXLYW9vj4sXLyIxMRGjRo1qEa8EyJ7n1wdRrVy5EnZ2dvD09ORaxysrKwFIew/eFBISwj3bFRUV8PHxQcFrA3OOHj0KZWVluUTQsvO+Pm3ktWvXsGzZMojFYq4sIiKCmxUFAL788kts2LAB27ZtQ2BgIP755x9u39u3b2Pr1q2YNGkS9PX1YWVlJbdoaWlx5SoqKrhy5QqmTJnCJcM+c+YMqqqq4OTk9B6fJCEfV8tL90+ajUuXLuG///0vAGD9+vU4d+4cNDU1ucSrJ0+e5FJeyBQVFeHgwYM4e/YsRCIR1qxZgylTpnDTS927dw/79u3DixcvcOLECUyYMAHt27dHfn4+SktLsXr1asyYMUMucWxLoK2tjYULF2LBggU4deoUNm/ejG+//RaBgYGYOHEiFi1aVDs5rb4+4OcnDSCuXwdMTMD690euUIh+Zmaf5kbIW6mrqEBXUxN/i0ToKhul+vy5NJiXvSagoyPtErazQ2VVFX4PCcH27duRmpqKDh064LvvvkNAQECdAy6as9d/H0RGRqJXr16YNGkSBAIBIiIiYG1tDXt7e8ybN48LCsPCwpCXlwcejweJRIJHjx7h8uXLyMvL4+o9ffo0OnfujIEDB0JFRQUSiQRJSUkwMTFBVVUVoqOjER0dDQBYuHAh5s2bx+USDAoKQnh4OKytrVFVVYWuXbvi+PHjcq2rixcvhpWVFTZt2oQ+ffqgc+fOMDExgYODA1auXKnwH126urpIS0tDv3798MUXX2DGjBn1jjwmpLmh6egI+UT++usvBAcHIzQ0FEKhEDY2Npg2bRqmT58OPT29Vzv++Sdw8iTA56PEywuJQiFG2diA30paBlv6dHRvupebi+dFRRjYtSsQHy+dVYYx6SjxoUPBXF2RnJaGnTt34tChQygsLMSQIUMwd+5cfP31183+XUBCSOtDwSAhn1hlZSUOHz6M4OBg7sV2Z2dn+Pr6YuLEiVBVVpa2DmZno1pNDUWdOsHA1hZoxu9MvotWEwxWVQFFRah48QLPL12C6fPn4Mm6KPv2xb0BAxD8shXr4cOH6NChA7y9vREQEIBevXp92msnhLRpFAwS0ow8ffoUUVFR+P3335Geng4dHR2MGTMGM7294ZKYCP7r7xiqqkq7knV0pNOTvb7o6ACamtI5j5u5FhEMMgaUlQFFRdLR3bJ/CwulI4OLi6WDfd4grKjA7zwewlJSkJ6eDk1NTXz99dfw9vbG8OHDW9zrDoSQ1omCQUKaqZs3byIiIgIRERF4/PgxjPX08LWJCcabmeFLIyOoNDSqlM+XTmWmo1N/wNgMuiSbRTAoFksDujeDvaKiV8HeawMR6qWmhpx//sGxW7cQ8+AB4p48AePxMGLECEybNg3jx4+HpqZmU98NIYS8EwoGCWnmJBIJLl26hKioKBw9eBBP8vKgo6oKZ2trjBsxAl9ZW6O9WAwUFEiXwkKgpOSt09lxVFVfBYxvBovt2km3NXEqk48SDFZWvmrFKyiQBnmypbgYKC1tuA4eT/p56OlJF319oH17MH19pDx6hKjYWJw8cwbZ2dkQ8PkYPHAgJnh4YPLkyfjsZQJpQghpjigYJKQFYYwhIyMDMTExiImJwbVr18Dn82FtbY0xY8bA3d0dAwYMgJJEIg10CgoAkejVIgsWCwrq7Nask6bm21sXG9kd3ehgkDFpMCcL7mTdt6+36r1MZfJWAgGgq/sq0HsZ7HH/rasr3QdAQUEBYmNjcfToUcTFxeH58+do164dxo4dC3d3d4waNQq6urrvfi+EEPIJUDBISAuWm5uL48ePIyYmBnFxcaioqEC7du1ga2sLFxcXjBo1CtbW1nWnx6ioeNWaWFfAWFQkl+y6Xo3sjm4wGKypke/ClV2bLNgrKVGsC1ddvVarHhfs6elJ76GeoLagoABnzpxBbGwsLl26hOzsbDDGYG5ujvHjx8Pd3R2DBw+GsrJyw9dBCCHNDAWDhLQSFRUVSE5ORnx8POLj43HlyhVUVVXJBYcuLi4YMGAA1NTUGq5Q1uImEkkDMKHwVbD4Abuja54/x99paTAyNwdfS+tV0Cdr1XstEXC9eDxp3fW16unrK/x+JGMMT58+RVJSEuLi4uSCPxMTEwwdOhTOzs5wdnZG165dW0QyaEIIeRsKBglppcrLy5GcnIyEhAS54FAgEMDCwgKWlpaws7PDoEGDYGNjA3V19Xc/SU3Nh+uOfhtlZfku3Ndb9fT1pYHle7zbyBjDkydPcOHCBVy5cgXXr19HVlYWhEIhAMDY2JgL/lxcXCj4I4S0ShQMEtJGVFRUICMjA6mpqUhNTcW1a9dw8+ZN1NTUgM/nw9zcHJ9//jl69uyJ3r17o2/fvujVq1fjR7/W1R0tW3/yBKyiAjwADACvfXvA0lIa4BkYvOrCbeR7ibLWvszMTGRmZiI7OxvZ2dm4desWRC/nEjYwMICNjQ1sbW1hY2MDGxsbmJqaUvBHCGn1KBgkpA2rqKjAjRs3uAAxIyMDd+7cQWFhIbdPx44d0aVLF1hYWKBHjx7o3LkztxgbGzcuWMzIAIKDIcHLidLnzAH69XvnaiQSCV68eIHHjx8jJycHjx8/xv3793H37l08ePAAjx494ubL5fP56Nq1K3r16gVra2su8DMxMaHAjxDSJlEwSAipRSgU4s6dO3LL7du38ddff6Hs9cTXALS0tGBgYAADAwN07NgR7du3h7a2Nrfo6OhAR0cHurq60NbWRrt27SAQCMDn88Hn8yHJzsbTixfRycEBvJ49IRaLUVFRgcLCQhQVFaG4uBhFRUUoKSlBcXExSktLUVRUhOfPn+P58+fIz8+HSCRCzRuDXQwNDdGzZ0/07NkT3bt3R48ePdCjRw+YmZlBRUXlY36chBDSrFEwSAhRGGMMxcXFyM3Nxd9//y235ObmIjc3FyKRCCUlJSgtLUVpaSkqFUnr0gAejwctLS1u0dHRQadOnWBoaAgjIyMYGhrKLR07dqSAjxBCFETBICGkSVVXV6O0tFQuQBSLxZBIJJBIJBCLxVBSUpJbVFVVoa2tDS0tLWhra0NDQ4O6cAkhpIlQMEgIIYQQ0obRLOmkVUlLS8PPP/8MiUQCbW1tVFZWQktLC927d4ednR3u3LmDgIAA2NvbQ0NDAzdu3IBQKISzszPEYjHS0tLQp08fJCQkAACOHDmCHTt2QFVVFampqXjy5AksLCxw7949FBYW4tChQ1i8eDFKS0sxbNgwaGhoICsrC4MGDcL69eu5acgqKyvxxx9/YNmyZXj8+DFGjx4NU1NTPHv2DPfu3cP48eOxdOlSaGlpfcJPj3wsly5dwo4dO7Bnzx4MHDgQ3bt3ByAdCJOVlYWamhqkpaU16TW87dmuz6RJk/DHH3/IlTk7O+Pu3bvo06cPlJSUcPr0aZibm6N79+4oKSlBcnIyQkJCMGPGjCa9H0JIIzBCWol9+/YxQ0NDdvHiRbny1NRUZmpqyo4ePcp2797NTp8+zW3z9fVlxsbG3HphYSHz8/NjjDEWFxfH+vbty0pKShhjjNXU1LBFixYxCwsLufo9PDzk6khPT2dqamrM2tqaicViuX0XL17MALDq6mqu7PLly0xNTY0NHjyYSSSSRn4KpKXIyspiANjOnTvlyquqqpi/v3+TnlvRZ/t158+fZwBq/XzNnj2blZaWcusAWGBgILcu+7kjhDRfdcxRRUjLk56eDl9fX/z8888YOHCg3LYBAwYgNDQU+fn5sLCwgKura731tGvXDr6+vgCAkJAQuLq6cq11fD4fmzZtwueffy53jIaGhtx6v379MHHiRFy/fh3nz5+X21ZXGhYHBwfMmjULFy5cQGJiouI3TVq0+pJ8Kysrw8PDo0nPreiz/brQ0FBoamoiJCRErtzHx+et6YXGjRsHMzOzD3PhhJAmQcEgaRUWLlyIzz77DJ6ennVuHzFiBKysrODk5NRgXUOGDAEgzcF34MAB5OTkcNt4PB7Gjh3bYB2GhoYAwM1k0RDZl3B+fr5C+5PWbdSoUU1a/7s+20KhEDU1NfDx8cGBAwdQUlLCbfvyyy8bPJ/sZ4oQ0jxRMEhavEePHuH8+fNwcnKCQFD/a7ADBgx4p3r9/f2Rk5MDKysr7N69G+zlWKuAgIAGj01JSYFAIICtra1C57p9+za0tbXpS5Ng1apVAIBDhw7ByMgIzs7OAID79+9jypQp4PF4ePjwIYRCITZs2AAzMzNcvnwZ1tbW6Nu3L8RiMSorK7F06VIsWbIEbm5umDRpEnJzc7lzvOuzHR4ejpkzZ2Lu3Ln4559/EBkZ2bQfAiHko6JgkLR4N27cAGMMpqamtbbdu3cPK1euhJeXF3x9fXH27FmF63Vzc8OOHTtQVlYGf39/2Nvb4+rVq289pqamBuvWrUNiYiKCgoLQtWvXBs+TkJCAhIQEnDp1CgYGBgpfH2kddu/ejRkzZmDGjBmwt7dHWFgYAGDChAkYPnw4t5+5uTlmz57NrVdXV6O6uhoPHz5EdHQ0AgMDMXjwYPD5fPj6+sLExAQbN27E8ePHAQCurq5cYu53fbaTkpIwdOhQWFlZwd7evlZXMSGkZaNgkLR4si6rqqqqWtu6deuG+fPnY//+/VBXV5f7clXEnDlzkJ6ejmHDhiElJQWOjo5Yv359rf1EIhEWLVoEExMThISEIC0tDYsXL663Xk9PT+5L2MXFBTdu3MB//vMflJaWvtP1kZbPz88PYWFhCAsLQ1JSklwLtpKS/K/o19c7deoER0dHAICvry8mTZqEbdu24caNG9i/fz8mTJjA7RsYGIibN28iIiKCK1P02U5ISMCwYcO49blz5yIlJQUZGRmNv3lCSLNAwSBp8WQvp9eXEqNjx44A8N6tbj169MDZs2cRGRkJXV1dBAYGIjY2Vm4fJSUl/PLLL/j+++/x8OFDPHjw4K11HjhwALt27UJycjKuXr0KMzMzHDx4EL/88st7XSNpHVRUVDB69GiF95cFh+3atePK4uPja5X1798fAoEAKSkpcscr8myHhYXhwoULXOtlbGws1NTUsHPnzne+P0JI80TBIGnxbG1tYWxsjHPnzn3QlrXw8HC5dS8vL67LLSYmps5jFi1aBFdXV8yaNQt5eXkKncfOzg6bN28GACQnJzfiiklrMGvWrEYdL3v/79mzZ1yZkpISOnToAGVlZQCKP9v5+flQVlZGVFQU13q5b98+eHt7IyIiAhUVFY26VkJI80DBIGnxBAIB1q1bh/LycgQFBX2wepOSkmqN7nV0dISWlhY6depU5zE8Hg/h4eHg8Xjw9fXlvpgbIktOLRuF3FyJxWKsX78ebm5uGDNmDLS1tcHj8bgA5ty5c7C3twePx4OxsTGio6Pljr9z5w5cXV3B5/OxZs0apKenY+7cueDxeDA0NERoaCjKysoASIOSQYMGgcfjwcXFBX/++Sd2794NS0tL8Hi8OgcxxMTEwM7ODra2tjh06FDTfyBNRCwWY8+ePVBRUUF5eTlXLpFI5P6tyxdffAEAXOJ0QBogikQiDB06FIDiz3ZYWBgmT55c6xw+Pj4oKCjAwYMH3/3mCCHNz6dMckjIh7RixQomEAjYtm3b5JI3FxYWMgDshx9+qHWMp6cn09fXr7M+b29vNnLkSCYSibiyI0eOMD09PZaTk8OVeXh4MIFAIHfOY8eOMQBs6dKlcnXWlXS6rKyMffXVV0xdXZ1lZGS8+41/RCtWrGB+fn7cvQqFQubs7MxmzpzJ7ZObm8tUVFTYmDFj6qwjOjqaffPNN9x6eXk5A8AWLVpUa9+YmBgGgJ06dYorEwqFTFdXl2lra7O7d+/WOmbr1q1s27Zt732PH0t2djYDwLZu3VprW2BgIIuPj2c//fQTU1NTYwkJCSw2NpZ5e3szAGzv3r1MJBKxuLg4BoBlZ2fLHT9ixAjWv39/Vl5ezhiTJn52cHDgkqAr8mxXVlayvn37spqamlrXJxaLmY6ODrOzs5MrLysrYwDYd99917gPhxDyUVEwSFqVpKQkNnnyZDZ8+HA2Z84c5uPjw0aMGME2bdrEiouLuf0KCwtZaGgo09fXZwDY6tWrawUWsi9eLS0t5urqytzc3NiYMWNYZmYmY4yxgoICFhISwnR1dblZF+7cucMd/69//YsBYOPHj2dHjhxhv//+O+vcuTMDwJycnNiUKVOYp6cn69+/P3N3d2fJyckf50NqBENDQ3bs2DG5spycHBYQECBXNnnyZKaurs4KCwtr1eHn51frs8Ybs1bInDlzhgFg8fHxcuWWlpZMXV2d2djYsMrKSrltu3fvbvYzXly4cIFNmDCBAWBmZmbM19eX+fr6Mh8fH2ZnZ8c6dOjAampqmEgkYo6OjkxLS4stWbKExcXFsd69e7MtW7awtLQ05uHhwQAwDw8PuWdPJBKxadOmMQcHBzZ//nw2b948ucCvoWc7JyeHeXp6Mh6PxzZs2CA3wwhjjG3ZsoUpKSkxAGz27Nns0aNHLCMjgy1YsIABYF26dGF79+6t9f+GENI8UTBICFGYnp4eGzVqFNfiJLN9+3a59fj4eAaAbd68Wa68tLSUjR07tla97xoMDhkyhIWGhjIAbOHChXLbWkIwSAghzQm9M0gIUdjMmTNx6tQp2Nra4sKFC1z5m8mKnZ2d0atXL+zYsUOu/MCBAx9sqjV/f3/4+vri119/5QY/EEIIeXcUDBJCFBYUFITZs2fj5s2bcHJywpQpU/D06dM69w0ICEBmZiYuXrzIlR08ePCDzru7detWWFpaYsaMGfVeByGEkLejYJAQojCBQIDg4GCcOnUK3bp1Q1RUFCwtLXH69Ola+/r6+kJdXZ1rHbx37x6MjIygoaFRZ93Hjh3jctnJlo0bN771ejQ0NBAdHY3KykpMnToVYrG48TdJCCFtDAWDhJB3NnLkSGRmZmLFihUoLi6Gh4dHrVQlenp68PT0RHR0NEQiEXbt2gU/P79663R3d+dy2cmWJUuWNHgtsu7oxMRErF69utH3RgghbQ0Fg4QQhb2erFhVVRWrVq3C2rVrUVJSIpfXTmbu3LmoqKjArl27uCnPmsLUqVMREBCAtWvXcjNwEEIIUQwFg4QQhR0+fLhWmaurKwDUmYjbwcEBVlZWWLlyJbdfU/ntt9/Qv39/7Nmzp0nPQwghrQ0Fg4QQhV27dg3Lli2TezcvIiICjo6O9bb6BQQEoKqqCtOnT69zu2zGkerq6lrbKisr5f6VEQqFtfZVVVVFdHS03Jy8hBBCGib41BdACGlZgoKCEB4eDmtra1RVVaFr1644fvw4+Hx+nft7e3vjwoUL6NixY61t6enpCA0NBQBER0ejd+/e8PT0hIaGBk6cOIHffvsNAPDvf/8bEokEPXr0QFRUFDIzMxEUFAQvLy+YmZlx9VlYWGDXrl0oKSlpgjsnhJDWiceYgpOnEkIIIYSQVoe6iQkhhBBC2jAKBgkhhBBC2jAKBgkhhBBC2jAKBgkhhBBC2jAKBgkhhBBC2jAKBgkhhBBC2jAKBgkhhBBC2jAKBgkhhBBC2jAKBgkhhBBC2jAKBgkhhBBC2jAKBgkhhBBC2jAKBgkhhBBC2jAKBgkhhBBC2rD/AzGc0gZeZiuIAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.rcParams.update({\"font.size\": 12})\n", + "\n", + "for base_model in [\"vit-b-32\", \"vit-b-16\", \"vit-l-14\"]:\n", + " print(f\"{base_model} results:\")\n", + " df = pd.read_csv(f\"results/{base_model}.csv\")\n", + " display(df)\n", + " df = df.rename(columns=TASK_TO_LABEL_MAPPING)\n", + " # plot radar chart\n", + " figsize = (4.5, 4.5) if base_model != \"vit-l-14\" else (6, 4.5)\n", + " print(figsize)\n", + " fig = plt.figure(figsize=figsize)\n", + " ax = fig.add_subplot(111, projection=\"polar\")\n", + " plot_radar_chart(\n", + " df, ax, colors=COLORS, plot_legend=False if base_model == \"vit-l-14\" else False\n", + " )\n", + "\n", + " if base_model == \"vit-l-14\":\n", + " # Creating the legend\n", + " legend = ax.legend(\n", + " loc=\"upper right\",\n", + " bbox_to_anchor=(1.1, 0.95),\n", + " bbox_transform=fig.transFigure,\n", + " frameon=True,\n", + " )\n", + " # Renaming the legend labels\n", + " legend.get_texts()[0].set_text(\"Pre-Trained\")\n", + " legend.get_texts()[1].set_text(\"Fine-Tuned\")\n", + "\n", + " plt.savefig(\n", + " f\"images/single_model_{base_model}.pdf\",\n", + " bbox_inches=\"tight\",\n", + " )\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "vit-b-32 results:\n", + "\n", + "=== pretrained results:\n", + "8: 0 0.480806\n", + "dtype: float64\n", + "14: 0 0.56939\n", + "dtype: float64\n", + "20: 0 0.556463\n", + "dtype: float64\n", + "=== finetuned results:\n", + "8: 1 0.903797\n", + "dtype: float64\n", + "14: 1 0.892527\n", + "dtype: float64\n", + "20: 1 0.89771\n", + "dtype: float64\n", + "\n", + "vit-b-16 results:\n", + "\n", + "=== pretrained results:\n", + "8: 0 0.553602\n", + "dtype: float64\n", + "14: 0 0.619737\n", + "dtype: float64\n", + "20: 0 0.598467\n", + "dtype: float64\n", + "=== finetuned results:\n", + "8: 1 0.923761\n", + "dtype: float64\n", + "14: 1 0.913306\n", + "dtype: float64\n", + "20: 1 0.916208\n", + "dtype: float64\n", + "\n", + "vit-l-14 results:\n", + "\n", + "=== pretrained results:\n", + "8: 0 0.64925\n", + "dtype: float64\n", + "14: 0 0.691027\n", + "dtype: float64\n", + "20: 0 0.656069\n", + "dtype: float64\n", + "=== finetuned results:\n", + "8: 1 0.943035\n", + "dtype: float64\n", + "14: 1 0.933667\n", + "dtype: float64\n", + "20: 1 0.935247\n", + "dtype: float64\n" + ] + } + ], + "source": [ + "TA8 = [\n", + " \"sun397\",\n", + " \"stanford-cars\",\n", + " \"resisc45\",\n", + " \"eurosat\",\n", + " \"svhn\",\n", + " \"gtsrb\",\n", + " \"mnist\",\n", + " \"dtd\",\n", + "]\n", + "TALL14 = TA8 + [\n", + " \"oxford_flowers102\",\n", + " \"pcam\",\n", + " \"fer2013\",\n", + " \"oxford-iiit-pet\",\n", + " \"stl10\",\n", + " \"cifar100\",\n", + "]\n", + "TALL20 = TALL14 + [\n", + " \"cifar10\",\n", + " \"food101\",\n", + " \"fashion_mnist\",\n", + " \"emnist_letters\",\n", + " \"kmnist\",\n", + " \"rendered-sst2\",\n", + "]\n", + "for base_model in [\"vit-b-32\", \"vit-b-16\", \"vit-l-14\"]:\n", + " print(f\"\\n{base_model} results:\\n\")\n", + " df = pd.read_csv(f\"results/{base_model}.csv\")\n", + " pretrained_df = df[df[\"model_name\"] == \"pretrained\"]\n", + " print(\"=== pretrained results:\")\n", + " print(\"8:\", pretrained_df[TA8].mean(axis=1))\n", + " print(\"14:\", pretrained_df[TALL14].mean(axis=1))\n", + " print(\"20:\", pretrained_df[TALL20].mean(axis=1))\n", + " finetuned_df = df[df[\"model_name\"] == \"finetuned\"]\n", + " print(\"=== finetuned results:\")\n", + " print(\"8:\", finetuned_df[TA8].mean(axis=1))\n", + " print(\"14:\", finetuned_df[TALL14].mean(axis=1))\n", + " print(\"20:\", finetuned_df[TALL20].mean(axis=1))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "svd_proj", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/opcm/clip_vit_exp.sh b/examples/opcm/clip_vit_exp.sh new file mode 100644 index 00000000..cadbb650 --- /dev/null +++ b/examples/opcm/clip_vit_exp.sh @@ -0,0 +1,1099 @@ +# clip-vit-base-patch32 +# eight tasks, ablation study on alpha +# without random seed, for each alpha, run 10 times +for alpha in 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0; do + for i in {0..9}; do + if [ -f outputs/opcm/ablation-alpha/vit-b-32-TA8-alpha-${alpha}/version_${i}/report_7.json ]; then + echo "skip alpha=${alpha}, version=${i}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/opcm/ablation-alpha \ + fabric.loggers.name=vit-b-32-TA8-alpha-${alpha} \ + fabric.loggers.version=${i} \ + method=opcm/sequential_projection \ + method.alpha=$alpha \ + method.seed=null \ + method.save_on_every_step=false \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_TA8_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TA8 + done +done + +# clip-vit-large-patch14 +# eight tasks, ablation study on alpha +# without random seed, for each alpha, run 10 times +for alpha in 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0; do + for i in {0..9}; do + if [ -f outputs/opcm/ablation-alpha/vit-l-14-TA8-alpha-${alpha}/version_${i}/report_7.json ]; then + echo "skip alpha=${alpha}, version=${i}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/opcm/ablation-alpha \ + fabric.loggers.name=vit-l-14-TA8-alpha-${alpha} \ + fabric.loggers.version=${i} \ + method=opcm/sequential_projection \ + method.alpha=$alpha \ + method.seed=null \ + method.save_on_every_step=false \ + modelpool=CLIPVisionModelPool/clip-vit-large-patch14_TA8_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TA8_L14 + done +done + +# clip-vit-base-patch16 +# eight tasks, alpha = 0.5 +# without random seed, for alpha=0.5, run 10 times +for i in {0..9}; do + if [ -f outputs/opcm/ablation-alpha/vit-b-16-TA8-alpha-0.5/version_${i}/report_7.json ]; then + echo "skip alpha=0.5, version=${i}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/opcm/ablation-alpha \ + fabric.loggers.name=vit-b-16-TA8-alpha-0.5 \ + fabric.loggers.version=${i} \ + method=opcm/sequential_projection \ + method.alpha=0.5 \ + method.seed=null \ + method.save_on_every_step=false \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch16_TA8_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TA8_B16 +done + +# clip-vit-base-patch32, 14 tasks +# without random seed, for alpha=0.5, run 10 times +for i in {0..9}; do + if [ -f outputs/opcm/ablation-alpha/vit-b-32-TALL14-alpha-0.5/version_${i}/report_13.json ]; then + echo "skip alpha=0.5, version=${i}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/opcm/ablation-alpha \ + fabric.loggers.name=vit-b-32-TALL14-alpha-0.5 \ + fabric.loggers.version=${i} \ + method=opcm/sequential_projection \ + method.alpha=0.5 \ + method.seed=null \ + method.save_on_every_step=false \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_TALL14_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL14 +done + +# clip-vit-base-patch16, 8 tasks, ablation study on alpha, do not evaluate on each step +for alpha in 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0; do + for i in {0..9}; do + if [ -f outputs/opcm/ablation-alpha/vit-b-16-TA8-alpha-${alpha}/version_${i}/report.json ]; then + echo "skip alpha=${alpha}, version=${i}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/opcm/ablation-alpha \ + fabric.loggers.name=vit-b-16-TA8-alpha-${alpha} \ + fabric.loggers.version=${i} \ + method=opcm/sequential_projection \ + method.evaluate_on_every_step=false \ + method.alpha=${alpha} \ + method.seed=null \ + method.save_on_every_step=false \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch16_TA8_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TA8 \ + taskpool.base_model=openai/clip-vit-base-patch16 + done +done + +# clip-vit-base-patch32, 14 tasks, ablation study on alpha, do not evaluate on each step +for alpha in 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0; do + for i in {0..9}; do + if [ -f outputs/opcm/ablation-alpha/vit-b-32-TALL14-alpha-${alpha}/version_${i}/report.json ]; then + echo "skip alpha=${alpha}, version=${i}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/opcm/ablation-alpha \ + fabric.loggers.name=vit-b-32-TALL14-alpha-${alpha} \ + fabric.loggers.version=${i} \ + method=opcm/sequential_projection \ + method.evaluate_on_every_step=false \ + method.alpha=${alpha} \ + method.seed=null \ + method.save_on_every_step=false \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_TALL14_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL14 + done +done + +# clip-vit-base-patch16, 14 tasks +# without random seed, for alpha=0.5, run 10 times +for i in {0..9}; do + if [ -f outputs/opcm/ablation-alpha/vit-b-16-TALL14-alpha-0.5/version_${i}/report_13.json ]; then + echo "skip alpha=0.5, version=${i}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/opcm/ablation-alpha \ + fabric.loggers.name=vit-b-16-TALL14-alpha-0.5 \ + fabric.loggers.version=${i} \ + method=opcm/sequential_projection \ + method.alpha=0.5 \ + method.seed=null \ + method.save_on_every_step=false \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch16_TALL14_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL14 \ + taskpool.base_model=openai/clip-vit-base-patch16 +done + +# clip-vit-base-patch16, 14 tasks, ablation study on alpha, do not evaluate on each step +for alpha in 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0; do + for i in {0..9}; do + if [ -f outputs/opcm/ablation-alpha/vit-b-16-TALL14-alpha-${alpha}/version_${i}/report.json ]; then + echo "skip alpha=${alpha}, version=${i}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/opcm/ablation-alpha \ + fabric.loggers.name=vit-b-16-TALL14-alpha-${alpha} \ + fabric.loggers.version=${i} \ + method=opcm/sequential_projection \ + method.evaluate_on_every_step=false \ + method.alpha=${alpha} \ + method.seed=null \ + method.save_on_every_step=false \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch16_TALL14_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL14 \ + taskpool.base_model=openai/clip-vit-base-patch16 + done +done + +# clip-vit-large-patch14, 14 tasks +# without random seed, for alpha=0.5, run 10 times +for i in {0..9}; do + if [ -f outputs/opcm/ablation-alpha/vit-l-14-TALL14-alpha-0.5/version_${i}/report_13.json ]; then + echo "skip alpha=0.5, version=${i}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/opcm/ablation-alpha \ + fabric.loggers.name=vit-l-14-TALL14-alpha-0.5 \ + fabric.loggers.version=${i} \ + method=opcm/sequential_projection \ + method.alpha=0.5 \ + method.seed=null \ + method.save_on_every_step=false \ + modelpool=CLIPVisionModelPool/clip-vit-large-patch14_TALL14_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL14 \ + taskpool.base_model=openai/clip-vit-large-patch14 +done + +# clip-vit-large-patch14, 14 tasks, ablation study on alpha, do not evaluate on each step +for alpha in 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0; do + for i in {0..9}; do + if [ -f outputs/opcm/ablation-alpha/vit-l-14-TALL14-alpha-${alpha}/version_${i}/report.json ]; then + echo "skip alpha=${alpha}, version=${i}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/opcm/ablation-alpha \ + fabric.loggers.name=vit-l-14-TALL14-alpha-${alpha} \ + fabric.loggers.version=${i} \ + method=opcm/sequential_projection \ + method.evaluate_on_every_step=false \ + method.alpha=${alpha} \ + method.seed=null \ + method.save_on_every_step=false \ + modelpool=CLIPVisionModelPool/clip-vit-large-patch14_TALL14_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL14 \ + taskpool.base_model=openai/clip-vit-large-patch14 + done +done + +# clip-vit-base-patch32, 20 tasks +# without random seed, for alpha=0.5, run 10 times +for i in {0..9}; do + if [ -f outputs/opcm/ablation-alpha/vit-b-32-TALL20-alpha-0.5/version_${i}/report_19.json ]; then + echo "skip alpha=0.5, version=${i}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/opcm/ablation-alpha \ + fabric.loggers.name=vit-b-32-TALL20-alpha-0.5 \ + fabric.loggers.version=${i} \ + method=opcm/sequential_projection \ + method.alpha=0.5 \ + method.seed=null \ + method.save_on_every_step=false \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_TALL20_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL20 +done + +# clip-vit-base-patch32, 20 tasks, ablation study on alpha, do not evaluate on each step +for alpha in 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0; do + for i in {0..9}; do + if [ -f outputs/opcm/ablation-alpha/vit-b-32-TALL20-alpha-${alpha}/version_${i}/report.json ]; then + echo "skip alpha=${alpha}, version=${i}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/opcm/ablation-alpha \ + fabric.loggers.name=vit-b-32-TALL20-alpha-${alpha} \ + fabric.loggers.version=${i} \ + method=opcm/sequential_projection \ + method.evaluate_on_every_step=false \ + method.alpha=${alpha} \ + method.seed=null \ + method.save_on_every_step=false \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_TALL20_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL20 + done +done + +# clip-vit-base-patch16, 20 tasks +# without random seed, for alpha=0.5, run 10 times +for i in {0..9}; do + if [ -f outputs/opcm/ablation-alpha/vit-b-16-TALL20-alpha-0.5/version_${i}/report_19.json ]; then + echo "skip alpha=0.5, version=${i}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/opcm/ablation-alpha \ + fabric.loggers.name=vit-b-16-TALL20-alpha-0.5 \ + fabric.loggers.version=${i} \ + method=opcm/sequential_projection \ + method.alpha=0.5 \ + method.seed=null \ + method.save_on_every_step=false \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch16_TALL20_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL20 \ + taskpool.base_model=openai/clip-vit-base-patch16 +done + +# clip-vit-base-patch16, 20 tasks, ablation study on alpha, do not evaluate on each step +for alpha in 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0; do + for i in {0..9}; do + if [ -f outputs/opcm/ablation-alpha/vit-b-16-TALL20-alpha-${alpha}/version_${i}/report.json ]; then + echo "skip alpha=${alpha}, version=${i}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/opcm/ablation-alpha \ + fabric.loggers.name=vit-b-16-TALL20-alpha-${alpha} \ + fabric.loggers.version=${i} \ + method=opcm/sequential_projection \ + method.evaluate_on_every_step=false \ + method.alpha=${alpha} \ + method.seed=null \ + method.save_on_every_step=false \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch16_TALL20_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL20 \ + taskpool.base_model=openai/clip-vit-base-patch16 + done +done + +# clip-vit-large-patch14, 20 tasks +# without random seed, for alpha=0.5, run 10 times +for i in {0..9}; do + if [ -f outputs/opcm/ablation-alpha/vit-l-14-TALL20-alpha-0.5/version_${i}/report_19.json ]; then + echo "skip alpha=0.5, version=${i}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/opcm/ablation-alpha \ + fabric.loggers.name=vit-l-14-TALL20-alpha-0.5 \ + fabric.loggers.version=${i} \ + method=opcm/sequential_projection \ + method.alpha=0.5 \ + method.seed=null \ + method.save_on_every_step=false \ + modelpool=CLIPVisionModelPool/clip-vit-large-patch14_TALL20_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL20 \ + taskpool.base_model=openai/clip-vit-large-patch14 +done + +# clip-vit-large-patch14, 20 tasks, ablation study on alpha, do not evaluate on each step +for alpha in 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0; do + for i in {0..9}; do + if [ -f outputs/opcm/ablation-alpha/vit-l-14-TALL20-alpha-${alpha}/version_${i}/report.json ]; then + echo "skip alpha=${alpha}, version=${i}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/opcm/ablation-alpha \ + fabric.loggers.name=vit-l-14-TALL20-alpha-${alpha} \ + fabric.loggers.version=${i} \ + method=opcm/sequential_projection \ + method.evaluate_on_every_step=false \ + method.alpha=${alpha} \ + method.seed=null \ + method.save_on_every_step=false \ + modelpool=CLIPVisionModelPool/clip-vit-large-patch14_TALL20_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL20 \ + taskpool.base_model=openai/clip-vit-large-patch14 + done +done + +# === Task Arithmetic === +# vit-b-32, 8 tasks +for scaling_factor in 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0; do + if [ -f outputs/task_arithmetic/vit-b-32-TA8-scaling-factor-${scaling_factor}/version_0/report.json ]; then + echo "skip scaling_factor=${scaling_factor}, version=0" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/task_arithmetic \ + fabric.loggers.name=vit-b-32-TA8-scaling-factor-${scaling_factor} \ + fabric.loggers.version=0 \ + method=task_arithmetic \ + method.scaling_factor=${scaling_factor} \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_TA8_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TA8 +done + +# vit-b-16, 8 tasks +for scaling_factor in 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0; do + if [ -f outputs/task_arithmetic/vit-b-16-TA8-scaling-factor-${scaling_factor}/version_0/report.json ]; then + echo "skip scaling_factor=${scaling_factor}, version=0" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/task_arithmetic \ + fabric.loggers.name=vit-b-16-TA8-scaling-factor-${scaling_factor} \ + fabric.loggers.version=0 \ + method=task_arithmetic \ + method.scaling_factor=${scaling_factor} \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch16_TA8_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TA8 \ + taskpool.base_model=openai/clip-vit-base-patch16 +done + +# vit-l-14, 8 tasks +for scaling_factor in 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0; do + if [ -f outputs/task_arithmetic/vit-l-14-TA8-scaling-factor-${scaling_factor}/version_0/report.json ]; then + echo "skip scaling_factor=${scaling_factor}, version=0" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/task_arithmetic \ + fabric.loggers.name=vit-l-14-TA8-scaling-factor-${scaling_factor} \ + fabric.loggers.version=0 \ + method=task_arithmetic \ + method.scaling_factor=${scaling_factor} \ + modelpool=CLIPVisionModelPool/clip-vit-large-patch14_TA8_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TA8 \ + taskpool.base_model=openai/clip-vit-large-patch14 +done + +# vit-b-32, 14 tasks +for scaling_factor in 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0; do + if [ -f outputs/task_arithmetic/vit-b-32-TALL14-scaling-factor-${scaling_factor}/version_0/report.json ]; then + echo "skip scaling_factor=${scaling_factor}, version=0" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/task_arithmetic \ + fabric.loggers.name=vit-b-32-TALL14-scaling-factor-${scaling_factor} \ + fabric.loggers.version=0 \ + method=task_arithmetic \ + method.scaling_factor=${scaling_factor} \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_TALL14_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL14 +done + +# vit-b-16, 14 tasks +for scaling_factor in 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0; do + if [ -f outputs/task_arithmetic/vit-b-16-TALL14-scaling-factor-${scaling_factor}/version_0/report.json ]; then + echo "skip scaling_factor=${scaling_factor}, version=0" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/task_arithmetic \ + fabric.loggers.name=vit-b-16-TALL14-scaling-factor-${scaling_factor} \ + fabric.loggers.version=0 \ + method=task_arithmetic \ + method.scaling_factor=${scaling_factor} \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch16_TALL14_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL14 \ + taskpool.base_model=openai/clip-vit-base-patch16 +done + +# vit-l-14, 14 tasks +for scaling_factor in 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0; do + if [ -f outputs/task_arithmetic/vit-l-14-TALL14-scaling-factor-${scaling_factor}/version_0/report.json ]; then + echo "skip scaling_factor=${scaling_factor}, version=0" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/task_arithmetic \ + fabric.loggers.name=vit-l-14-TALL14-scaling-factor-${scaling_factor} \ + fabric.loggers.version=0 \ + method=task_arithmetic \ + method.scaling_factor=${scaling_factor} \ + modelpool=CLIPVisionModelPool/clip-vit-large-patch14_TALL14_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL14 \ + taskpool.base_model=openai/clip-vit-large-patch14 +done + +# vit-b-32, 20 tasks +for scaling_factor in 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0; do + if [ -f outputs/task_arithmetic/vit-b-32-TALL20-scaling-factor-${scaling_factor}/version_0/report.json ]; then + echo "skip scaling_factor=${scaling_factor}, version=0" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/task_arithmetic \ + fabric.loggers.name=vit-b-32-TALL20-scaling-factor-${scaling_factor} \ + fabric.loggers.version=0 \ + method=task_arithmetic \ + method.scaling_factor=${scaling_factor} \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_TALL20_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL20 +done + +# vit-b-16, 20 tasks +for scaling_factor in 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0; do + if [ -f outputs/task_arithmetic/vit-b-16-TALL20-scaling-factor-${scaling_factor}/version_0/report.json ]; then + echo "skip scaling_factor=${scaling_factor}, version=0" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/task_arithmetic \ + fabric.loggers.name=vit-b-16-TALL20-scaling-factor-${scaling_factor} \ + fabric.loggers.version=0 \ + method=task_arithmetic \ + method.scaling_factor=${scaling_factor} \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch16_TALL20_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL20 \ + taskpool.base_model=openai/clip-vit-base-patch16 +done + +# vit-l-14, 20 tasks +for scaling_factor in 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0; do + if [ -f outputs/task_arithmetic/vit-l-14-TALL20-scaling-factor-${scaling_factor}/version_0/report.json ]; then + echo "skip scaling_factor=${scaling_factor}, version=0" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/task_arithmetic \ + fabric.loggers.name=vit-l-14-TALL20-scaling-factor-${scaling_factor} \ + fabric.loggers.version=0 \ + method=task_arithmetic \ + method.scaling_factor=${scaling_factor} \ + modelpool=CLIPVisionModelPool/clip-vit-large-patch14_TALL20_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL20 \ + taskpool.base_model=openai/clip-vit-large-patch14 +done + +# === Continual Task Arithmetic === + +# clip-vit-base-patch32, 8 tasks +for version in {0..9}; do + if [ -f outputs/continual_task_arithmetic/vit-b-32-TA8/version_${version}/report_7.json ]; then + echo "skip version=${version}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/continual_task_arithmetic \ + fabric.loggers.name=vit-b-32-TA8 \ + fabric.loggers.version=${version} \ + method=opcm/task_arithmetic \ + method.scaling_factor=0.3 \ + method.shuffle_order=true \ + method.save_on_every_step=false \ + method.evaluate_on_every_step=true \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_TA8_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TA8 +done + +# clip-vit-base-patch16, 8 tasks +for version in {0..9}; do + if [ -f outputs/continual_task_arithmetic/vit-b-16-TA8/version_${version}/report_7.json ]; then + echo "skip version=${version}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/continual_task_arithmetic \ + fabric.loggers.name=vit-b-16-TA8 \ + fabric.loggers.version=${version} \ + method=opcm/task_arithmetic \ + method.scaling_factor=0.3 \ + method.shuffle_order=true \ + method.save_on_every_step=false \ + method.evaluate_on_every_step=true \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch16_TA8_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TA8 \ + taskpool.base_model=openai/clip-vit-base-patch16 +done + +# clip-vit-large-patch14, 8 tasks +for version in {0..9}; do + if [ -f outputs/continual_task_arithmetic/vit-l-14-TA8/version_${version}/report_7.json ]; then + echo "skip version=${version}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/continual_task_arithmetic \ + fabric.loggers.name=vit-l-14-TA8 \ + fabric.loggers.version=${version} \ + method=opcm/task_arithmetic \ + method.scaling_factor=0.3 \ + method.shuffle_order=true \ + method.save_on_every_step=false \ + method.evaluate_on_every_step=true \ + modelpool=CLIPVisionModelPool/clip-vit-large-patch14_TA8_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TA8 \ + taskpool.base_model=openai/clip-vit-large-patch14 +done + +# clip-vit-base-patch32, 14 tasks +for version in {0..9}; do + if [ -f outputs/continual_task_arithmetic/vit-b-32-TALL14/version_${version}/report_13.json ]; then + echo "skip version=${version}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/continual_task_arithmetic \ + fabric.loggers.name=vit-b-32-TALL14 \ + fabric.loggers.version=${version} \ + method=opcm/task_arithmetic \ + method.scaling_factor=0.1 \ + method.shuffle_order=true \ + method.save_on_every_step=false \ + method.evaluate_on_every_step=true \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_TALL14_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL14 +done + +# clip-vit-base-patch16, 14 tasks +for version in {0..9}; do + if [ -f outputs/continual_task_arithmetic/vit-b-16-TALL14/version_${version}/report_13.json ]; then + echo "skip version=${version}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/continual_task_arithmetic \ + fabric.loggers.name=vit-b-16-TALL14 \ + fabric.loggers.version=${version} \ + method=opcm/task_arithmetic \ + method.scaling_factor=0.1 \ + method.shuffle_order=true \ + method.save_on_every_step=false \ + method.evaluate_on_every_step=true \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch16_TALL14_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL14 \ + taskpool.base_model=openai/clip-vit-base-patch16 +done + +# clip-vit-large-patch14, 14 tasks +for version in {0..9}; do + if [ -f outputs/continual_task_arithmetic/vit-l-14-TALL14/version_${version}/report_13.json ]; then + echo "skip version=${version}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/continual_task_arithmetic \ + fabric.loggers.name=vit-l-14-TALL14 \ + fabric.loggers.version=${version} \ + method=opcm/task_arithmetic \ + method.scaling_factor=0.1 \ + method.shuffle_order=true \ + method.save_on_every_step=false \ + method.evaluate_on_every_step=true \ + modelpool=CLIPVisionModelPool/clip-vit-large-patch14_TALL14_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL14 \ + taskpool.base_model=openai/clip-vit-large-patch14 +done + +# clip-vit-base-patch32, 20 tasks +for version in {0..9}; do + if [ -f outputs/continual_task_arithmetic/vit-b-32-TALL20/version_${version}/report_19.json ]; then + echo "skip version=${version}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/continual_task_arithmetic \ + fabric.loggers.name=vit-b-32-TALL20 \ + fabric.loggers.version=${version} \ + method=opcm/task_arithmetic \ + method.scaling_factor=0.1 \ + method.shuffle_order=true \ + method.save_on_every_step=false \ + method.evaluate_on_every_step=true \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_TALL20_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL20 +done + +# clip-vit-base-patch16, 20 tasks +for version in {0..9}; do + if [ -f outputs/continual_task_arithmetic/vit-b-16-TALL20/version_${version}/report_19.json ]; then + echo "skip version=${version}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/continual_task_arithmetic \ + fabric.loggers.name=vit-b-16-TALL20 \ + fabric.loggers.version=${version} \ + method=opcm/task_arithmetic \ + method.scaling_factor=0.1 \ + method.shuffle_order=true \ + method.save_on_every_step=false \ + method.evaluate_on_every_step=true \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch16_TALL20_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL20 \ + taskpool.base_model=openai/clip-vit-base-patch16 +done + +# clip-vit-large-large-patch14, 20 tasks +for version in {0..9}; do + if [ -f outputs/continual_task_arithmetic/vit-l-14-TALL20/version_${version}/report_19.json ]; then + echo "skip version=${version}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/continual_task_arithmetic \ + fabric.loggers.name=vit-l-14-TALL20 \ + fabric.loggers.version=${version} \ + method=opcm/task_arithmetic \ + method.scaling_factor=0.1 \ + method.shuffle_order=true \ + method.save_on_every_step=false \ + method.evaluate_on_every_step=true \ + modelpool=CLIPVisionModelPool/clip-vit-large-patch14_TALL20_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL20 \ + taskpool.base_model=openai/clip-vit-large-patch14 +done + +# === Simple Average === +# clip-vit-base-patch32, eight tasks, 10 times +for version in {0..9}; do + if [ -f outputs/weight_average/vit-b-32-TA8/version_${version}/report_7.json ]; then + echo "skip version=${version}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/weight_average \ + fabric.loggers.name=vit-b-32-TA8 \ + fabric.loggers.version=${version} \ + method=opcm/weight_average \ + method.shuffle_order=true \ + method.save_on_every_step=false \ + method.evaluate_on_every_step=true \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_TA8_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TA8 +done + +# clip-vit-base-patch16, eight tasks, 10 times +for version in {0..9}; do + if [ -f outputs/weight_average/vit-b-16-TA8/version_${version}/report_7.json ]; then + echo "skip version=${version}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/weight_average \ + fabric.loggers.name=vit-b-16-TA8 \ + fabric.loggers.version=${version} \ + method=opcm/weight_average \ + method.shuffle_order=true \ + method.save_on_every_step=false \ + method.evaluate_on_every_step=true \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch16_TA8_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TA8 \ + taskpool.base_model=openai/clip-vit-base-patch16 +done + +# clip-vit-large-patch14, eight tasks, 10 times +for version in {0..9}; do + if [ -f outputs/weight_average/vit-l-14-TA8/version_${version}/report_7.json ]; then + echo "skip version=${version}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/weight_average \ + fabric.loggers.name=vit-l-14-TA8 \ + fabric.loggers.version=${version} \ + method=opcm/weight_average \ + method.shuffle_order=true \ + method.save_on_every_step=false \ + method.evaluate_on_every_step=true \ + modelpool=CLIPVisionModelPool/clip-vit-large-patch14_TA8_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TA8 \ + taskpool.base_model=openai/clip-vit-large-patch14 +done + +# clip-vit-base-patch32, 14 tasks, 10 times +for version in {0..9}; do + if [ -f outputs/weight_average/vit-b-32-TALL14/version_${version}/report_13.json ]; then + echo "skip version=${version}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/weight_average \ + fabric.loggers.name=vit-b-32-TALL14 \ + fabric.loggers.version=${version} \ + method=opcm/weight_average \ + method.shuffle_order=true \ + method.save_on_every_step=false \ + method.evaluate_on_every_step=true \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_TALL14_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL14 +done + +# clip-vit-base-patch16, 14 tasks, 10 times +for version in {0..9}; do + if [ -f outputs/weight_average/vit-b-16-TALL14/version_${version}/report_13.json ]; then + echo "skip version=${version}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/weight_average \ + fabric.loggers.name=vit-b-16-TALL14 \ + fabric.loggers.version=${version} \ + method=opcm/weight_average \ + method.shuffle_order=true \ + method.save_on_every_step=false \ + method.evaluate_on_every_step=true \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch16_TALL14_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL14 \ + taskpool.base_model=openai/clip-vit-base-patch16 +done + +# clip-vit-large-patch14, 14 tasks, 10 times +for version in {0..9}; do + if [ -f outputs/weight_average/vit-l-14-TALL14/version_${version}/report_13.json ]; then + echo "skip version=${version}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/weight_average \ + fabric.loggers.name=vit-l-14-TALL14 \ + fabric.loggers.version=${version} \ + method=opcm/weight_average \ + method.shuffle_order=true \ + method.save_on_every_step=false \ + method.evaluate_on_every_step=true \ + modelpool=CLIPVisionModelPool/clip-vit-large-patch14_TALL14_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL14 \ + taskpool.base_model=openai/clip-vit-large-patch14 +done + +# clip-vit-base-patch32, 20 tasks, 10 times +for version in {0..9}; do + if [ -f outputs/weight_average/vit-b-32-TALL20/version_${version}/report_19.json ]; then + echo "skip version=${version}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/weight_average \ + fabric.loggers.name=vit-b-32-TALL20 \ + fabric.loggers.version=${version} \ + method=opcm/weight_average \ + method.shuffle_order=true \ + method.save_on_every_step=false \ + method.evaluate_on_every_step=true \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_TALL20_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL20 +done + +# clip-vit-base-patch16, 20 tasks, 10 times +for version in {0..9}; do + if [ -f outputs/weight_average/vit-b-16-TALL20/version_${version}/report_19.json ]; then + echo "skip version=${version}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/weight_average \ + fabric.loggers.name=vit-b-16-TALL20 \ + fabric.loggers.version=${version} \ + method=opcm/weight_average \ + method.shuffle_order=true \ + method.save_on_every_step=false \ + method.evaluate_on_every_step=true \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch16_TALL20_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL20 \ + taskpool.base_model=openai/clip-vit-base-patch16 +done + +# clip-vit-large-patch14, 20 tasks, 10 times +for version in {0..9}; do + if [ -f outputs/weight_average/vit-l-14-TALL20/version_${version}/report_19.json ]; then + echo "skip version=${version}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/weight_average \ + fabric.loggers.name=vit-l-14-TALL20 \ + fabric.loggers.version=${version} \ + method=opcm/weight_average \ + method.shuffle_order=true \ + method.save_on_every_step=false \ + method.evaluate_on_every_step=true \ + modelpool=CLIPVisionModelPool/clip-vit-large-patch14_TALL20_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL20 \ + taskpool.base_model=openai/clip-vit-large-patch14 +done + +# clip-vit-base-patch32, 14 tasks +for version in {0..9}; do + if [ -f outputs/weight_average/vit-b-32-TALL14/version_${version}/report.json ]; then + echo "skip version=${version}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/weight_average \ + fabric.loggers.name=vit-b-32-TALL14 \ + fabric.loggers.version=${version} \ + method=opcm/weight_average \ + method.shuffle_order=true \ + method.save_on_every_step=false \ + method.evaluate_on_every_step=true \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_TALL14_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL14 +done + +# clip-vit-base-patch32, 14 tasks +if [ ! -f outputs/simple_average/vit-b-32-TALL14/version_0/report.json ]; then + fusion_bench \ + fabric.loggers.root_dir=outputs/simple_average \ + fabric.loggers.name=vit-b-32-TALL14 \ + fabric.loggers.version=0 \ + method=simple_average \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_TALL14_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL14 +fi + +# clip-vit-base-patch16, 14 tasks +if [ ! -f outputs/simple_average/vit-b-16-TALL14/version_0/report.json ]; then + fusion_bench \ + fabric.loggers.root_dir=outputs/simple_average \ + fabric.loggers.name=vit-b-16-TALL14 \ + fabric.loggers.version=0 \ + method=simple_average \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch16_TALL14_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL14 \ + taskpool.base_model=openai/clip-vit-base-patch16 +fi + +# clip-vit-large-patch14, 14 tasks +if [ ! -f outputs/simple_average/vit-l-14-TALL14/version_0/report.json ]; then + fusion_bench \ + fabric.loggers.root_dir=outputs/simple_average \ + fabric.loggers.name=vit-l-14-TALL14 \ + fabric.loggers.version=0 \ + method=simple_average \ + modelpool=CLIPVisionModelPool/clip-vit-large-patch14_TALL14_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL14 \ + taskpool.base_model=openai/clip-vit-large-patch14 +fi + +# clip-vit-base-patch32, 20 tasks +if [ ! -f outputs/simple_average/vit-b-32-TALL20/version_0/report.json ]; then + fusion_bench \ + fabric.loggers.root_dir=outputs/simple_average \ + fabric.loggers.name=vit-b-32-TALL20 \ + fabric.loggers.version=0 \ + method=simple_average \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_TALL20_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL20 +fi + +# clip-vit-base-patch16, 20 tasks +if [ ! -f outputs/simple_average/vit-b-16-TALL20/version_0/report.json ]; then + fusion_bench \ + fabric.loggers.root_dir=outputs/simple_average \ + fabric.loggers.name=vit-b-16-TALL20 \ + fabric.loggers.version=0 \ + method=simple_average \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch16_TALL20_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL20 \ + taskpool.base_model=openai/clip-vit-base-patch16 +fi + +# clip-vit-large-patch14, 20 tasks +if [ ! -f outputs/simple_average/vit-l-14-TALL20/version_0/report.json ]; then + fusion_bench \ + fabric.loggers.root_dir=outputs/simple_average \ + fabric.loggers.name=vit-l-14-TALL20 \ + fabric.loggers.version=0 \ + method=simple_average \ + modelpool=CLIPVisionModelPool/clip-vit-large-patch14_TALL20_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL20 \ + taskpool.base_model=openai/clip-vit-large-patch14 +fi + +# === Continual Ties-Merging === + +# clip-vit-base-patch32, 8 tasks +for version in {0..9}; do + if [ -f outputs/continual_ties_merging/vit-b-32-TA8/version_${version}/report_7.json ]; then + echo "skip version=${version}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/continual_ties_merging \ + fabric.loggers.name=vit-b-32-TA8 \ + fabric.loggers.version=${version} \ + method=opcm/ties_merging \ + method.scaling_factor=0.3 \ + method.shuffle_order=true \ + method.save_on_every_step=false \ + method.evaluate_on_every_step=true \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_TA8_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TA8 +done + +# clip-vit-base-patch16, 8 tasks +for version in {0..9}; do + if [ -f outputs/continual_ties_merging/vit-b-16-TA8/version_${version}/report_7.json ]; then + echo "skip version=${version}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/continual_ties_merging \ + fabric.loggers.name=vit-b-16-TA8 \ + fabric.loggers.version=${version} \ + method=opcm/ties_merging \ + method.scaling_factor=0.3 \ + method.shuffle_order=true \ + method.save_on_every_step=false \ + method.evaluate_on_every_step=true \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch16_TA8_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TA8 \ + taskpool.base_model=openai/clip-vit-base-patch16 +done + +# clip-vit-large-patch14, 8 tasks +for version in {0..9}; do + if [ -f outputs/continual_ties_merging/vit-l-14-TA8/version_${version}/report_7.json ]; then + echo "skip version=${version}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/continual_ties_merging \ + fabric.loggers.name=vit-l-14-TA8 \ + fabric.loggers.version=${version} \ + method=opcm/ties_merging \ + method.scaling_factor=0.3 \ + method.shuffle_order=true \ + method.save_on_every_step=false \ + method.evaluate_on_every_step=true \ + modelpool=CLIPVisionModelPool/clip-vit-large-patch14_TA8_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TA8 \ + taskpool.base_model=openai/clip-vit-large-patch14 +done + +# clip-vit-base-patch32, 14 tasks +for version in {0..9}; do + if [ -f outputs/continual_ties_merging/vit-b-32-TALL14/version_${version}/report_13.json ]; then + echo "skip version=${version}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/continual_ties_merging \ + fabric.loggers.name=vit-b-32-TALL14 \ + fabric.loggers.version=${version} \ + method=opcm/ties_merging \ + method.scaling_factor=0.1 \ + method.shuffle_order=true \ + method.save_on_every_step=false \ + method.evaluate_on_every_step=true \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_TALL14_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL14 +done + +# clip-vit-base-patch16, 14 tasks +for version in {0..9}; do + if [ -f outputs/continual_ties_merging/vit-b-16-TALL14/version_${version}/report_13.json ]; then + echo "skip version=${version}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/continual_ties_merging \ + fabric.loggers.name=vit-b-16-TALL14 \ + fabric.loggers.version=${version} \ + method=opcm/ties_merging \ + method.scaling_factor=0.1 \ + method.shuffle_order=true \ + method.save_on_every_step=false \ + method.evaluate_on_every_step=true \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch16_TALL14_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL14 \ + taskpool.base_model=openai/clip-vit-base-patch16 +done + +# clip-vit-large-patch14, 14 tasks +for version in {0..9}; do + if [ -f outputs/continual_ties_merging/vit-l-14-TALL14/version_${version}/report_13.json ]; then + echo "skip version=${version}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/continual_ties_merging \ + fabric.loggers.name=vit-l-14-TALL14 \ + fabric.loggers.version=${version} \ + method=opcm/ties_merging \ + method.scaling_factor=0.1 \ + method.shuffle_order=true \ + method.save_on_every_step=false \ + method.evaluate_on_every_step=true \ + modelpool=CLIPVisionModelPool/clip-vit-large-patch14_TALL14_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL14 \ + taskpool.base_model=openai/clip-vit-large-patch14 +done + +# clip-vit-base-patch32, 20 tasks +for version in {0..9}; do + if [ -f outputs/continual_ties_merging/vit-b-32-TALL20/version_${version}/report_19.json ]; then + echo "skip version=${version}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/continual_ties_merging \ + fabric.loggers.name=vit-b-32-TALL20 \ + fabric.loggers.version=${version} \ + method=opcm/ties_merging \ + method.scaling_factor=0.1 \ + method.shuffle_order=true \ + method.save_on_every_step=false \ + method.evaluate_on_every_step=true \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch32_TALL20_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL20 +done + +# clip-vit-base-patch16, 20 tasks +for version in {0..9}; do + if [ -f outputs/continual_ties_merging/vit-b-16-TALL20/version_${version}/report_19.json ]; then + echo "skip version=${version}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/continual_ties_merging \ + fabric.loggers.name=vit-b-16-TALL20 \ + fabric.loggers.version=${version} \ + method=opcm/ties_merging \ + method.scaling_factor=0.1 \ + method.shuffle_order=true \ + method.save_on_every_step=false \ + method.evaluate_on_every_step=true \ + modelpool=CLIPVisionModelPool/clip-vit-base-patch16_TALL20_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL20 \ + taskpool.base_model=openai/clip-vit-base-patch16 +done + +# clip-vit-large-large-patch14, 20 tasks +for version in {0..9}; do + if [ -f outputs/continual_ties_merging/vit-l-14-TALL20/version_${version}/report_19.json ]; then + echo "skip version=${version}" + continue + fi + fusion_bench \ + fabric.loggers.root_dir=outputs/continual_ties_merging \ + fabric.loggers.name=vit-l-14-TALL20 \ + fabric.loggers.version=${version} \ + method=opcm/ties_merging \ + method.scaling_factor=0.1 \ + method.shuffle_order=true \ + method.save_on_every_step=false \ + method.evaluate_on_every_step=true \ + modelpool=CLIPVisionModelPool/clip-vit-large-patch14_TALL20_model_only \ + taskpool=CLIPVisionModelTaskPool/clip-vit-classification_TALL20 \ + taskpool.base_model=openai/clip-vit-large-patch14 +done diff --git a/examples/opcm/plot_utils.py b/examples/opcm/plot_utils.py new file mode 100644 index 00000000..26da00c0 --- /dev/null +++ b/examples/opcm/plot_utils.py @@ -0,0 +1,80 @@ +import matplotlib +import matplotlib.pyplot as plt + +plt.rcParams["font.family"] = "Times New Roman" +plt.rcParams["mathtext.fontset"] = "cm" + +matplotlib.rcParams["pdf.fonttype"] = 42 +matplotlib.rcParams["ps.fonttype"] = 42 + + +TASK_TO_LABEL_MAPPING = { + "sun397": "SUN397", + "stanford-cars": "Cars", + "resisc45": "RESISC45", + "eurosat": "EuroSAT", + "svhn": "SVHN", + "gtsrb": "GTSRB", + "mnist": "MNIST", + "dtd": "DTD", + "oxford_flowers102": "Flowers102", + "pcam": "PCAM", + "fer2013": "FER2013", + "oxford-iiit-pet": "OxfordIIITPet", + "stl10": "STL10", + "cifar100": "CIFAR100", + "cifar10": "CIFAR10", + "food101": "Food101", + "fashion_mnist": "FashionMNIST", + "emnist_letters": "EMNIST", + "kmnist": "KMNIST", + "rendered-sst2": "RenderedSST2", +} + +forest_colors = [ + "#2D5A27", # Deep forest green + "#8B9E77", # Sage + "#4A6741", # Moss green + "#DED29E", # Dried grass + "#996B3D", # Tree bark brown +] +ocean_colors = [ + "#1B4B6B", # Deep sea blue + "#4D8FAC", # Ocean surface + "#7DB0CD", # Shallow water + "#B9D6E8", # Sea foam + "#2E6B5E", # Seaweed green +] + +earth_colors = [ + "#8B6F47", # Rich soil + "#C7A17C", # Sandy beige + "#635147", # Deep earth + "#9B8574", # Clay + "#4F583D", # Mountain moss +] + +autumn_colors = [ + "#7D4427", # Russet + "#B67352", # Terra cotta + "#DCA466", # Golden leaf + "#8B9E77", # Faded sage + "#5B4337", # Dark bark +] + + +v1_colors = [ + "#FF4B4B", # 活力红 + "#FFB03B", # 明亮黄 + "#3B7FF5", # 科技蓝 + "#4BC0AA", # 清新青 + "#9D5BF0", # 创新紫 +] + +v2_colors = [ + "#2C73D2", # 深蓝色(冷色) + "#FF6B6B", # 珊瑚红(暖色) + "#00C9A7", # 青碧色(冷色) + "#FF9F43", # 橙色(暖色) + "#845EC2", # 紫色(中性) +] diff --git a/examples/opcm/results/vit-b-16.csv b/examples/opcm/results/vit-b-16.csv new file mode 100644 index 00000000..ae5bc253 --- /dev/null +++ b/examples/opcm/results/vit-b-16.csv @@ -0,0 +1,3 @@ +model_name,mnist,fer2013,cifar10,stl10,oxford_flowers102,emnist_letters,sun397,stanford-cars,resisc45,eurosat,svhn,gtsrb,dtd,pcam,oxford-iiit-pet,cifar100,food101,fashion_mnist,kmnist,rendered-sst2 +pretrained,0.517300009727478,0.4639175236225128,0.9077000021934509,0.9825000166893005,0.7131240963935852,0.12437500059604645,0.6553652286529541,0.6468101143836975,0.6638095378875732,0.5411111116409302,0.5198985934257507,0.43452098965644836,0.44999998807907104,0.54022216796875,0.8844372034072876,0.6632999777793884,0.8701385855674744,0.6729999780654907,0.11209999769926071,0.6057111620903015 +finetuned,0.996999979019165,0.7276400327682495,0.9828000068664551,0.9815000295639038,0.948772132396698,0.9528365135192871,0.7892191410064697,0.8589727878570557,0.9655555486679077,0.9900000095367432,0.9760679006576538,0.9898654222488403,0.8234042525291443,0.905548095703125,0.9449441432952881,0.8877999782562256,0.9186534881591797,0.9452999830245972,0.9810000061988831,0.7572762370109558 diff --git a/examples/opcm/results/vit-b-32.csv b/examples/opcm/results/vit-b-32.csv new file mode 100644 index 00000000..0640a29f --- /dev/null +++ b/examples/opcm/results/vit-b-32.csv @@ -0,0 +1,3 @@ +model_name,mnist,fer2013,cifar10,stl10,oxford_flowers102,emnist_letters,sun397,stanford-cars,resisc45,eurosat,svhn,gtsrb,dtd,pcam,oxford-iiit-pet,cifar100,food101,fashion_mnist,kmnist,rendered-sst2 +pretrained,0.48260000348091125,0.4125104546546936,0.8982999920845032,0.9712499976158142,0.6644982695579529,0.11975961178541183,0.631788432598114,0.5958214402198792,0.6026983857154846,0.44999998807907104,0.3162645995616913,0.3252573311328888,0.44202128052711487,0.606353759765625,0.8331970572471619,0.6371999979019165,0.8236435651779175,0.6301000118255615,0.09950000047683716,0.5864909291267395 +finetuned,0.9958000183105469,0.7160769104957581,0.9760000109672546,0.9754999876022339,0.8855098485946655,0.9561538696289062,0.7486146092414856,0.7852256894111633,0.9514285922050476,0.9907407164573669,0.9726874828338623,0.989073634147644,0.7968084812164307,0.879608154296875,0.9245026111602783,0.8838000297546387,0.8840792179107666,0.9474999904632568,0.9822999835014343,0.7127951383590698 diff --git a/examples/opcm/results/vit-l-14.csv b/examples/opcm/results/vit-l-14.csv new file mode 100644 index 00000000..abf2a3c6 --- /dev/null +++ b/examples/opcm/results/vit-l-14.csv @@ -0,0 +1,3 @@ +model_name,mnist,fer2013,cifar10,stl10,oxford_flowers102,emnist_letters,sun397,stanford-cars,resisc45,eurosat,svhn,gtsrb,dtd,pcam,oxford-iiit-pet,cifar100,food101,fashion_mnist,kmnist,rendered-sst2 +pretrained,0.7631000280380249,0.49958205223083496,0.9559000134468079,0.9936249852180481,0.7924866080284119,0.12341345846652985,0.6822166442871094,0.7786344885826111,0.7133333086967468,0.6118518710136414,0.5843192934989929,0.505225658416748,0.5553191304206848,0.512054443359375,0.9321340918540955,0.7505000233650208,0.9118019938468933,0.6696000099182129,0.09709999710321426,0.6891817450523376 +finetuned,0.9976000189781189,0.7592644095420837,0.9912999868392944,0.9922500252723694,0.9767441749572754,0.954278826713562,0.8276070356369019,0.9277452826499939,0.973809540271759,0.9911110997200012,0.9792178869247437,0.9923990368843079,0.8547872304916382,0.91131591796875,0.9574816226959229,0.9300000071525574,0.9477227926254272,0.9527999758720398,0.9829999804496765,0.8045030236244202 diff --git a/examples/run_model_combinations.py b/examples/run_model_combinations.py new file mode 100644 index 00000000..63a36ee9 --- /dev/null +++ b/examples/run_model_combinations.py @@ -0,0 +1,54 @@ +""" +This script is an example of how to run multiple experiments with different combinations of models. +""" + +import itertools +import multiprocessing + +from hydra import compose, initialize +from omegaconf import DictConfig, OmegaConf + +from fusion_bench.scripts.cli import main +from fusion_bench.utils.rich_utils import setup_colorlogging + +setup_colorlogging() + +MODEL_NAMES = { + "model_1": "tanganke/clip-vit-base-patch32_sun397", + "model_2": "tanganke/clip-vit-base-patch32_stanford-cars", +} +CONFIG_PATH = "config" +CONFIG_NAME = "fabric_model_fusion" +CONFIG_OVERRIDES = [ + "method=simple_average", + "modelpool=CLIPVisionModelPool/_template", + "dry_run=false", # print the config without running the program, remove this after testing +] + + +if __name__ == "__main__": + with initialize(version_base=None, config_path="config", job_name="test_app"): + cfg = compose( + config_name=CONFIG_NAME, + overrides=CONFIG_OVERRIDES, + return_hydra_config=False, + ) + + for num_models in range(1, len(MODEL_NAMES) + 1): + for selected_models in itertools.combinations(MODEL_NAMES, num_models): + models = { + "_pretrained_": "openai/clip-vit-base-patch32", + } + for model_name in selected_models: + models[model_name] = MODEL_NAMES[model_name] + cfg.modelpool.models = DictConfig(models) + + print(cfg) + + mp_ctx = multiprocessing.get_context("spawn") + p = mp_ctx.Process( + target=main, + args=(cfg,), + ) + p.start() + p.join() diff --git a/fusion_bench/__main__.py b/fusion_bench/__main__.py new file mode 100644 index 00000000..fbcb24a9 --- /dev/null +++ b/fusion_bench/__main__.py @@ -0,0 +1,4 @@ +from fusion_bench.scripts.cli import main + +if __name__ == "__main__": + main() diff --git a/fusion_bench/method/__init__.py b/fusion_bench/method/__init__.py index 2f7a64be..3853abf7 100644 --- a/fusion_bench/method/__init__.py +++ b/fusion_bench/method/__init__.py @@ -9,7 +9,10 @@ "base_algorithm": ["BaseModelFusionAlgorithm", "BaseAlgorithm"], "dummy": ["DummyAlgorithm"], # single task learning (fine-tuning) - "classification": ["ImageClassificationFineTuningForCLIP"], + "classification": [ + "ImageClassificationFineTuningForCLIP", + "ContinualImageClassificationFineTuningForCLIP", + ], "lm_finetune": ["FullFinetuneSFT", "PeftFinetuneSFT", "BradleyTerryRewardModeling"], # analysis "analysis": ["TaskVectorCosSimilarity", "TaskVectorViolinPlot"], @@ -51,6 +54,7 @@ ], "ada_svd": ["AdaSVDMergingForCLIPVisionModel"], "task_singular_vector": ["TaskSingularVectorMerging"], + "opcm": ["OPCMForCLIP"], # plug-and-play model merging methods "concrete_subspace": [ "ConcreteTaskArithmeticAlgorithmForCLIP", @@ -97,7 +101,10 @@ from .adamerging import * from .analysis import TaskVectorCosSimilarity, TaskVectorViolinPlot from .base_algorithm import BaseAlgorithm, BaseModelFusionAlgorithm - from .classification import ImageClassificationFineTuningForCLIP + from .classification import ( + ContinualImageClassificationFineTuningForCLIP, + ImageClassificationFineTuningForCLIP, + ) from .concrete_subspace import ( ConcreteLayerWiseAdaMergingForCLIP, ConcreteTaskArithmeticAlgorithmForCLIP, @@ -128,6 +135,7 @@ MixtralUpscalingAlgorithm, ) from .model_recombination import ModelRecombinationAlgorithm + from .opcm import OPCMForCLIP from .pruning import ( MagnitudeDiffPruningAlgorithm, MagnitudePruningForLlama, diff --git a/fusion_bench/method/classification/__init__.py b/fusion_bench/method/classification/__init__.py index 61131d99..b7d57fb7 100644 --- a/fusion_bench/method/classification/__init__.py +++ b/fusion_bench/method/classification/__init__.py @@ -1,2 +1,3 @@ # flake8: noqa F401 from .clip_finetune import ImageClassificationFineTuningForCLIP +from .continual_clip_finetune import ContinualImageClassificationFineTuningForCLIP diff --git a/fusion_bench/method/classification/clip_finetune.py b/fusion_bench/method/classification/clip_finetune.py index 3955a611..065eab81 100644 --- a/fusion_bench/method/classification/clip_finetune.py +++ b/fusion_bench/method/classification/clip_finetune.py @@ -184,9 +184,7 @@ def run(self, modelpool: CLIPVisionModelPool): self.save_model(classifier, save_path) if config.state_dict_save_path is not None: - self.save_model( - classifier, config.state_dict_save_path, trainable_only=True - ) + self.save_model(classifier, config.state_dict_save_path) self.print_profile_summary() return classifier.clip_model.vision_model diff --git a/fusion_bench/method/classification/continual_clip_finetune.py b/fusion_bench/method/classification/continual_clip_finetune.py new file mode 100644 index 00000000..90681588 --- /dev/null +++ b/fusion_bench/method/classification/continual_clip_finetune.py @@ -0,0 +1,297 @@ +import os +import random +import time +from copy import deepcopy +from typing import Optional, Tuple, cast + +import lightning as L +import torch +from omegaconf import DictConfig, OmegaConf +from peft import LoraConfig, PeftModel, get_peft_model +from peft.tuners.lora import LoraLayer +from safetensors.torch import save_file +from torch import nn +from torch.utils.data import DataLoader +from tqdm.auto import tqdm +from transformers import CLIPModel, CLIPProcessor, CLIPVisionModel +from transformers.models.clip.modeling_clip import CLIPVisionTransformer + +from fusion_bench import BaseAlgorithm, print_parameters +from fusion_bench.compat.modelpool import to_modelpool +from fusion_bench.dataset.clip_dataset import CLIPDataset +from fusion_bench.mixins import CLIPClassificationMixin +from fusion_bench.mixins.simple_profiler import SimpleProfilerMixin +from fusion_bench.modelpool import CLIPVisionModelPool +from fusion_bench.models.hf_clip import HFCLIPClassifier +from fusion_bench.models.linearized.linearized_model_utils import LinearizedModelWraper +from fusion_bench.taskpool import CLIPVisionModelTaskPool +from fusion_bench.utils.data import InfiniteDataLoader +from fusion_bench.utils.json import load_from_json, save_to_json +from fusion_bench.utils.fabric import seed_everything_by_time + + +class ContinualImageClassificationFineTuningForCLIP( + CLIPClassificationMixin, + SimpleProfilerMixin, + BaseAlgorithm, +): + # attributes to configuration keys mapping + _config_mapping = BaseAlgorithm._config_mapping | { + "seed": "seed", + "shuffle_order": "shuffle_order", + "learning_rate": "learning_rate", + "weight_decay": "weight_decay", + "num_steps": "num_steps", + "batch_size": "batch_size", + "num_workers": "num_workers", + "save_interval": "save_interval", + "state_dict_load_path": "state_dict_load_path", + "state_dict_save_path": "state_dict_save_path", + "skip_training": "skip_training", + "use_lora": "use_lora", + "lora_config": "lora_config", + } + + def __init__( + self, + seed: int = 42, + shuffle_order: bool = True, + learning_rate: float = 1e-5, + weight_decay: float = 0, + num_steps: int = 4000, + batch_size: int = 128, + num_workers: int = 16, + save_interval: int = 500, + state_dict_load_path: Optional[str] = None, + state_dict_save_path: Optional[str] = None, + skip_training: bool = False, + use_lora: bool = False, + lora_config: Optional[LoraConfig] = None, + ): + self.seed = seed + self.shuffle_order = shuffle_order + self.learning_rate = learning_rate + self.weight_decay = weight_decay + self.num_steps = num_steps + self.batch_size = batch_size + self.num_workers = num_workers + self.save_interval = save_interval + self.state_dict_load_path = state_dict_load_path + self.state_dict_save_path = state_dict_save_path + self.skip_training = skip_training + self.use_lora = use_lora + self.lora_config = lora_config + + def run(self, modelpool: CLIPVisionModelPool): + self.modelpool = to_modelpool(modelpool) + config = self.config + self.log_hyperparams(config, filename="method_config.yaml") + self.finetune_method = "fine-tune" + + if self.seed is not None: + L.seed_everything(self.seed) + else: + seed_everything_by_time(self.fabric) + + task_names = list(modelpool.train_dataset_names) + if self.shuffle_order: + random.shuffle(task_names) + if self.fabric.is_global_zero: + save_to_json(task_names, os.path.join(self.log_dir, "task_names.json")) + + if self._program.taskpool is not None and isinstance( + self._program.taskpool, CLIPVisionModelTaskPool + ): + has_taskpool = True + taskpool = cast(CLIPVisionModelTaskPool, self._program.taskpool) + test_datasets = taskpool._test_datasets + else: + has_taskpool = False + + with self.profile("setup model and optimizer"): + processor, classifier, optimizer, lr_scheduler = self.setup_model() + + if self.state_dict_load_path is not None: + self.fabric.load( + self.state_dict_load_path, + {"vision_model": classifier.clip_model.vision_model}, + ) + if self.skip_training: + return classifier.clip_model.vision_model + + self.setup_zero_shot_classification_head( + clip_processor=processor, + clip_model=classifier.clip_model, + task_names=task_names, + ) + + init_optimizer_state_dict = optimizer.state_dict() + init_lr_scheduler_state_dict = lr_scheduler.state_dict() + self.fabric.setup(classifier, optimizer) + + with self.profile("setup data"): + train_datasets = [ + CLIPDataset(modelpool.load_train_dataset(task_name), processor) + for task_name in task_names + ] + train_dataloaders = [ + DataLoader( + dataset, + shuffle=True, + batch_size=self.batch_size, + num_workers=self.num_workers, + ) + for dataset in train_datasets + ] + train_dataloaders = self.fabric.setup_dataloaders(*train_dataloaders) + if not isinstance(train_dataloaders, (list, tuple)): + train_dataloaders = [train_dataloaders] + train_dataloader_iters = [ + iter(InfiniteDataLoader(loader)) for loader in train_dataloaders + ] + + # continual train + for task_idx, task_name in tqdm( + enumerate(task_names), + dynamic_ncols=True, + disable=not self.fabric.is_global_zero, + ): + train_dataloader_iter = train_dataloader_iters[task_idx] + + # reset optimizer and lr scheduler + print("reset optimizer and lr scheduler") + optimizer.load_state_dict(init_optimizer_state_dict) + lr_scheduler.load_state_dict(init_lr_scheduler_state_dict) + + for step_idx in tqdm( + range(self.num_steps), + desc=f"continual fine-tune on {task_name}", + disable=not self.fabric.is_global_zero, + dynamic_ncols=True, + leave=False, + ): + optimizer.zero_grad() + loss = 0 + with self.profile("data loading"): + batch = next(train_dataloader_iter) + images, labels = batch + with self.profile("forward"): + classifier.zeroshot_weights = self.zeroshot_weights[task_name] + logits = classifier(images) + assert ( + labels.max() < logits.shape[1] + ), f"for task {task_name}, labels.max() = {labels.max()}, logits.shape[1] = {logits.shape[1]}" + loss = loss + nn.functional.cross_entropy(logits, labels) + + with self.profile("backward"): + self.fabric.backward(loss) + with self.profile("optimizer step"): + optimizer.step() + lr_scheduler.step() + + metrics = {"train/loss": loss} + self.fabric.log_dict(metrics, step=step_idx) + + if (step_idx + 1) % self.save_interval == 0: + save_path = os.path.join( + self.log_dir, + "checkpoints", + f"task={task_idx}_step={step_idx}.ckpt", + ) + self.save_model(classifier, save_path) + + if has_taskpool: + taskpool._is_setup = False + taskpool._test_datasets = DictConfig( + {t: test_datasets[t] for t in task_names[: task_idx + 1]} + ) + eval_report = taskpool.evaluate( + deepcopy(classifier.clip_model.vision_model), + name=task_name, + ) + if self.fabric.is_global_zero: + save_to_json( + eval_report, + os.path.join(self.log_dir, f"results_{task_idx}.json"), + ) + + if self.state_dict_save_path is not None: + self.save_model(classifier, self.state_dict_save_path) + self.print_profile_summary() + return classifier.clip_model.vision_model + + def save_model( + self, + model: HFCLIPClassifier | CLIPModel | CLIPVisionModel | CLIPVisionTransformer, + save_path: str, + ): + """ + Save the vision model to the specified path. + + Args: + model (Union[HFCLIPClassifier, CLIPModel, CLIPVisionModel, CLIPVisionTransformer]): The model to save. + save_path (str): The path to save the model. + """ + if isinstance(model, HFCLIPClassifier): + vision_model = model.clip_model.vision_model + elif isinstance(model, CLIPModel): + vision_model = model.vision_model + elif isinstance(model, CLIPVisionModel): + vision_model = model.vision_model + elif isinstance(model, CLIPVisionTransformer): + vision_model = model + else: + raise ValueError(f"Unsupported model type: {type(model)}") + + save_dir = os.path.dirname(save_path) + if save_dir and not os.path.exists(save_dir): + os.makedirs(save_dir, exist_ok=True) + self.fabric.save(save_path, {"vision_model": vision_model}) + + def setup_model(self): + """ + Sets up the model, optimizer, and learning rate scheduler. + + This method initializes the CLIP model, applies LoRA if specified, and configures the optimizer and learning rate scheduler. + + Returns: + Tuple: A tuple containing the processor, classifier, optimizer, and learning rate scheduler. + """ + config = self.config + modelpool = self.modelpool + + clip_model: CLIPModel = modelpool.load_clip_model("_pretrained_") + processor = modelpool.load_processor() + + self.finetune_method = "full fine-tune" + if self.use_lora: + self.finetune_method = "lora fine-tune" + lora_config = LoraConfig( + **OmegaConf.to_container( + self.lora_config, resolve=True, enum_to_str=True + ) + ) + clip_model.vision_model = get_peft_model( + clip_model.vision_model, lora_config + ) + + classifier = HFCLIPClassifier(clip_model, processor=processor) + + if self.fabric.is_global_zero: + print("=== Model Summary (For Vision Model Only) ===") + print_parameters(classifier.clip_model.vision_model) + # configure optimizers + optimizer = torch.optim.Adam( + [ + p + for p in classifier.clip_model.vision_model.parameters() + if p.requires_grad + ], + lr=self.learning_rate, + weight_decay=self.weight_decay, + ) + lr_scheduler = torch.optim.lr_scheduler.CosineAnnealingLR( + optimizer=optimizer, T_max=self.num_steps + ) + + return processor, classifier, optimizer, lr_scheduler diff --git a/fusion_bench/method/opcm/__init__.py b/fusion_bench/method/opcm/__init__.py new file mode 100644 index 00000000..e8cba404 --- /dev/null +++ b/fusion_bench/method/opcm/__init__.py @@ -0,0 +1,4 @@ +from .opcm import OPCMForCLIP +from .task_arithmetic import ContinualTaskArithmeticForCLIP +from .ties_merging import ContinualTiesMergingForCLIP +from .weight_average import ContinualWeightAverageForCLIP diff --git a/fusion_bench/method/opcm/opcm.py b/fusion_bench/method/opcm/opcm.py new file mode 100644 index 00000000..86b032e8 --- /dev/null +++ b/fusion_bench/method/opcm/opcm.py @@ -0,0 +1,277 @@ +import os +import random +import time +from collections import defaultdict +from copy import deepcopy +from pathlib import Path +from typing import TYPE_CHECKING, List, Literal, Optional, Tuple, cast + +import lightning as L +import numpy as np +import torch +from omegaconf import DictConfig +from torch import Tensor, nn +from tqdm.auto import tqdm +from transformers import CLIPVisionModel + +from fusion_bench import BaseAlgorithm, BaseModelPool +from fusion_bench.mixins import LightningFabricMixin +from fusion_bench.taskpool import CLIPVisionModelTaskPool +from fusion_bench.utils import instantiate +from fusion_bench.utils.json import load_from_json, save_to_json +from fusion_bench.utils.parameters import state_dict_to_vector +from fusion_bench.utils.state_dict_arithmetic import state_dict_sub + +from .utils import frobenius_inner_product, get_task_vector_norm, is_leaf_module, svd + +if TYPE_CHECKING: + from torch.utils.tensorboard import SummaryWriter + + +class OPCMForCLIP( + BaseAlgorithm, + LightningFabricMixin, +): + def __init__( + self, + alpha: float, + shuffle_order: bool = True, + seed: Optional[int] = None, + save_on_every_step: bool = True, + evaluate_on_every_step: bool = False, + **kwargs, + ): + """ + Continual Model Merging via SVD Projection. + + Args: + alpha (float): the scaling factor for the SVD projection. + shuffle_order (bool): whether to shuffle the order of the models. + seed (Optional[int]): the seed to use. + save_on_every_step (bool): whether to save the merged model on every step. + evaluate_on_every_step (bool): whether to evaluate the merged model on every step. + """ + self.alpha = alpha + self.shuffle_order = shuffle_order + self.seed = seed + self.save_on_every_step = save_on_every_step + self.evaluate_on_every_step = evaluate_on_every_step + super().__init__(**kwargs) + + @torch.no_grad() + def run(self, modelpool: BaseModelPool): + if self.seed is not None: + L.seed_everything(self.seed) + accelerator = self.fabric.device + + pretrained_model = modelpool.load_pretrained_model() + + model_names = modelpool.model_names + if self.shuffle_order: + random.shuffle(model_names) + + self.taskpool = cast(CLIPVisionModelTaskPool, self._program.taskpool) + self._test_datasets = deepcopy(self.taskpool._test_datasets) + """Configuration for the test datasets""" + + # log the model names + if self.log_dir is not None: + save_to_json(model_names, Path(self.log_dir) / "model_names.json") + tensorboard_summarywriter: "SummaryWriter" = self.tensorboard_summarywriter + tensorboard_summarywriter.add_text( + "global/model_names", str(model_names), global_step=0 + ) + + # get the average model + merged_model = modelpool.load_model(model_names[0]) + + if self.evaluate_on_every_step: + self.taskpool._is_setup = False + self.taskpool._test_datasets = DictConfig( + {model_names[0]: self._test_datasets[model_names[0]]} + ) + report = self.taskpool.evaluate(deepcopy(merged_model)) + save_to_json(report, Path(self.log_dir) / "report_0.json") + + self.avg_task_vector_norm = get_task_vector_norm(merged_model, pretrained_model) + self.all_task_vector_norm = [self.avg_task_vector_norm] + self.fabric.log("model/task_vector_norm", self.avg_task_vector_norm, step=0) + self.fabric.log("model/avg_task_vector_norm", self.avg_task_vector_norm, step=0) + self.fabric.log( + "model/merged_task_vector_norm", self.avg_task_vector_norm, step=0 + ) + + self.previous_lambda_t = 1 + self.lambda_t = None + self.fabric.log("model/lambda_t", self.previous_lambda_t, step=0) + self.fabric.log("empirical/lambda_t", 1, step=0) + + if self.save_on_every_step: + self.save_merged_model(merged_model, 0) + + for model_idx, model_name in tqdm( + enumerate(model_names[1:]), desc="Processing models" + ): + model_idx += 1 + task_model = modelpool.load_model(model_name) + + self.all_task_vector_norm.append( + get_task_vector_norm(task_model, pretrained_model) + ) + self.avg_task_vector_norm = np.mean(self.all_task_vector_norm) + self.fabric.log( + "model/task_vector_norm", self.all_task_vector_norm[-1], step=model_idx + ) + self.fabric.log( + "model/avg_task_vector_norm", self.avg_task_vector_norm, step=model_idx + ) + + self.lambda_t = 1 # temporary value + + for module_name, module in tqdm( + list(merged_model.named_modules()), + desc=f"Processing {model_name}", + leave=False, + ): + if not is_leaf_module(module): + continue + + if isinstance(module, nn.Linear): + module.weight.data = self.merge_linear_weights( + module.weight, + pretrained_model.get_submodule(module_name).weight, + task_model.get_submodule(module_name).weight, + param_name=".".join([module_name, "weight"]), + alpha=self.alpha, + accelerator=accelerator, + ) + if module.bias is not None: + module.bias.data = self.merge_other_parameters( + module.bias, + pretrained_model.get_submodule(module_name).bias, + task_model.get_submodule(module_name).bias, + param_name=".".join([module_name, "bias"]), + accelerator=accelerator, + ) + else: + for param_name, param in module.named_parameters(): + param.data = self.merge_other_parameters( + merged_W=param, + pretrained_W=pretrained_model.get_submodule( + module_name + ).get_parameter(param_name), + task_W=task_model.get_submodule(module_name).get_parameter( + param_name + ), + param_name=".".join([module_name, param_name]), + accelerator=accelerator, + ) + + task_vector_norm = get_task_vector_norm(merged_model, pretrained_model) + self.lambda_t *= task_vector_norm / self.avg_task_vector_norm + for param_name, param in merged_model.named_parameters(): + param.data = pretrained_model.get_parameter(param_name) + ( + param - pretrained_model.get_parameter(param_name) + ) * (self.avg_task_vector_norm / task_vector_norm) + self.fabric.log("model/lambda_t", self.lambda_t, step=model_idx) + self.fabric.log( + "empirical/lambda_t", np.sqrt(model_idx + 1), step=model_idx + ) + self.previous_lambda_t = self.lambda_t + self.lambda_t = None + + self.fabric.log( + "model/merged_task_vector_norm", + get_task_vector_norm(merged_model, pretrained_model), + step=model_idx, + ) + + if self.save_on_every_step: + self.save_merged_model(merged_model, model_idx) + + if self.evaluate_on_every_step: + self.taskpool._is_setup = False + self.taskpool._test_datasets = DictConfig( + {n: self._test_datasets[n] for n in model_names[: model_idx + 1]} + ) + report = self.taskpool.evaluate(deepcopy(merged_model)) + save_to_json(report, Path(self.log_dir) / f"report_{model_idx}.json") + + return merged_model + + def save_merged_model(self, merged_model: CLIPVisionModel, step: int): + os.makedirs(Path(self.log_dir) / "checkpoints", exist_ok=True) + merged_model.save_pretrained( + Path(self.log_dir) / "checkpoints" / f"merged_model_{step}" + ) + + def merge_linear_weights( + self, + merged_W: Tensor, + pretrained_W: Tensor, + task_W: Tensor, + param_name: str, + alpha: float, + accelerator: str = "cpu", + ): + original_device = merged_W.device + merged_W = merged_W.to(accelerator) + pretrained_W = pretrained_W.to(accelerator) + task_W = task_W.to(accelerator) + + previous_merged_tv = merged_W - pretrained_W + task_tv = task_W - pretrained_W + + u, s, v = svd(previous_merged_tv) + rank = s.size(0) + split_rank = (s.cumsum(dim=0) / s.sum() > alpha).float().argmax().item() + + projected_task_tv = u.T @ task_tv @ v + projected_task_tv.diag().fill_(0) + + projected_task_tv[:split_rank, :split_rank] = 0 + + cleaned_task_tv = u @ projected_task_tv @ v.T + + previous_lambda_t = self.previous_lambda_t + lambda_t = self.lambda_t + new_merged_W = ( + pretrained_W + + (previous_lambda_t * previous_merged_tv + cleaned_task_tv) / lambda_t + ) + return new_merged_W.to(original_device) + + def merge_other_parameters( + self, + merged_W: Tensor, + pretrained_W: Tensor, + task_W: Tensor, + param_name: str, + accelerator: str = "cpu", + ): + original_device = merged_W.device + merged_W = merged_W.to(accelerator) + pretrained_W = pretrained_W.to(accelerator) + task_W = task_W.to(accelerator) + + previous_merged_tv = merged_W - pretrained_W + task_tv = task_W - pretrained_W + + previous_lambda_t = self.previous_lambda_t + lambda_t = self.lambda_t + + new_merged_W = ( + pretrained_W + (previous_lambda_t * previous_merged_tv + task_tv) / lambda_t + ) + return new_merged_W.to(original_device) + + def compute_lambda_t( + self, previous_merged_tv: Tensor, task_tv: Tensor, previous_lambda_t: float + ): + previous_merged_tv = torch.flatten(previous_merged_tv) + task_tv = torch.flatten(task_tv) + + lambda_t = torch.linalg.vector_norm( + previous_lambda_t * previous_merged_tv + task_tv + ) / torch.linalg.vector_norm(previous_merged_tv) + return lambda_t.item() diff --git a/fusion_bench/method/opcm/task_arithmetic.py b/fusion_bench/method/opcm/task_arithmetic.py new file mode 100644 index 00000000..223a58aa --- /dev/null +++ b/fusion_bench/method/opcm/task_arithmetic.py @@ -0,0 +1,115 @@ +import os +import random +import time +from collections import defaultdict +from copy import deepcopy +from pathlib import Path +from typing import TYPE_CHECKING, List, Literal, Optional, Tuple, cast + +import lightning as L +import numpy as np +import torch +from omegaconf import DictConfig +from torch import Tensor, nn +from tqdm.auto import tqdm +from transformers import CLIPVisionModel + +from fusion_bench import BaseAlgorithm, BaseModelPool +from fusion_bench.mixins import LightningFabricMixin +from fusion_bench.taskpool import CLIPVisionModelTaskPool +from fusion_bench.utils.json import load_from_json, save_to_json +from fusion_bench.utils.state_dict_arithmetic import state_dict_add, state_dict_sub + +if TYPE_CHECKING: + from torch.utils.tensorboard import SummaryWriter + + +class ContinualTaskArithmeticForCLIP(BaseAlgorithm, LightningFabricMixin): + def __init__( + self, + scaling_factor: float, + shuffle_order: bool = True, + seed: Optional[int] = None, + save_on_every_step: bool = True, + evaluate_on_every_step: bool = False, + **kwargs, + ): + """ + Continual Model Merging via Task Arithmetic. + + Args: + scaling_factor (float): the scaling factor to use. + shuffle_order (bool): whether to shuffle the order of the models. + seed (Optional[int]): the seed to use. + save_on_every_step (bool): whether to save the merged model on every step. + evaluate_on_every_step (bool): whether to evaluate the merged model on every step. + """ + self.scaling_factor = scaling_factor + self.shuffle_order = shuffle_order + self.seed = seed + self.save_on_every_step = save_on_every_step + self.evaluate_on_every_step = evaluate_on_every_step + super().__init__(**kwargs) + + @torch.no_grad() + def run(self, modelpool: BaseModelPool): + if self.seed is not None: + L.seed_everything(self.seed) + + model_names = modelpool.model_names + if self.shuffle_order: + random.shuffle(model_names) + + self.taskpool = cast(CLIPVisionModelTaskPool, self._program.taskpool) + self._test_datasets = deepcopy(self.taskpool._test_datasets) + """Configuration for the test datasets""" + + # log the model names + if self.log_dir is not None: + save_to_json(model_names, Path(self.log_dir) / "model_names.json") + tensorboard_summarywriter: "SummaryWriter" = self.tensorboard_summarywriter + tensorboard_summarywriter.add_text( + "global/model_names", str(model_names), global_step=0 + ) + + # get the average model + pretrained_model = modelpool.load_pretrained_model() + merged_model = deepcopy(pretrained_model) + + for model_idx, model_name in tqdm( + enumerate(model_names), desc="Processing models" + ): + task_model = modelpool.load_model(model_name) + + for param_name, param in task_model.named_parameters(): + if not param.requires_grad: + continue + + task_param = param + merged_param = merged_model.get_parameter(param_name) + pretrained_param = pretrained_model.get_parameter(param_name) + + new_param = merged_param + self.scaling_factor * ( + task_param - pretrained_param + ) + merged_model.get_parameter(param_name).data = new_param + + if self.save_on_every_step: + self.save_merged_model(merged_model, model_idx) + + if self.evaluate_on_every_step: + self.taskpool._is_setup = False + self.taskpool._test_datasets = DictConfig( + {n: self._test_datasets[n] for n in model_names[: model_idx + 1]} + ) + report = self.taskpool.evaluate(deepcopy(merged_model)) + save_to_json(report, Path(self.log_dir) / f"report_{model_idx}.json") + + return merged_model + + def save_merged_model(self, merged_model: CLIPVisionModel, step: int): + os.makedirs(Path(self.log_dir) / "checkpoints", exist_ok=True) + torch.save( + merged_model.state_dict(), + Path(self.log_dir) / "checkpoints" / f"model_{step}.pth", + ) diff --git a/fusion_bench/method/opcm/ties_merging.py b/fusion_bench/method/opcm/ties_merging.py new file mode 100644 index 00000000..ae2273b5 --- /dev/null +++ b/fusion_bench/method/opcm/ties_merging.py @@ -0,0 +1,156 @@ +import os +import random +import time +from collections import defaultdict +from copy import deepcopy +from pathlib import Path +from typing import TYPE_CHECKING, List, Literal, Optional, Tuple, cast + +import lightning as L +import numpy as np +import torch +from omegaconf import DictConfig +from torch import Tensor, nn +from tqdm.auto import tqdm +from transformers import CLIPVisionModel + +from fusion_bench import BaseAlgorithm, BaseModelPool +from fusion_bench.method.ties_merging.ties_merging_utils import ( + state_dict_to_vector, + ties_merging, + vector_to_state_dict, +) +from fusion_bench.mixins import LightningFabricMixin +from fusion_bench.taskpool import CLIPVisionModelTaskPool +from fusion_bench.utils.json import load_from_json, save_to_json +from fusion_bench.utils.state_dict_arithmetic import state_dict_add, state_dict_sub + +if TYPE_CHECKING: + from torch.utils.tensorboard import SummaryWriter + + +class ContinualTiesMergingForCLIP(BaseAlgorithm, LightningFabricMixin): + def __init__( + self, + scaling_factor: float, + threshold: float, + remove_keys: Optional[List[str]] = None, + merge_func: Literal["sum", "mean", "max"] = "sum", + shuffle_order: bool = True, + seed: Optional[int] = None, + save_on_every_step: bool = True, + evaluate_on_every_step: bool = False, + **kwargs, + ): + """ + Continual Model Merging via Ties-Merging. + + Args: + scaling_factor (float): the scaling factor to use. + shuffle_order (bool): whether to shuffle the order of the models. + seed (Optional[int]): the seed to use. + save_on_every_step (bool): whether to save the merged model on every step. + evaluate_on_every_step (bool): whether to evaluate the merged model on every step. + """ + self.scaling_factor = scaling_factor + self.threshold = threshold + self.remove_keys = remove_keys if remove_keys is not None else [] + self.merge_func = merge_func + self.shuffle_order = shuffle_order + self.seed = seed + self.save_on_every_step = save_on_every_step + self.evaluate_on_every_step = evaluate_on_every_step + super().__init__(**kwargs) + + @torch.no_grad() + def run(self, modelpool: BaseModelPool): + if self.seed is not None: + L.seed_everything(self.seed) + + model_names = modelpool.model_names + if self.shuffle_order: + random.shuffle(model_names) + + self.taskpool = cast(CLIPVisionModelTaskPool, self._program.taskpool) + self._test_datasets = deepcopy(self.taskpool._test_datasets) + """Configuration for the test datasets""" + + # log the model names + if self.log_dir is not None: + save_to_json(model_names, Path(self.log_dir) / "model_names.json") + tensorboard_summarywriter: "SummaryWriter" = self.tensorboard_summarywriter + tensorboard_summarywriter.add_text( + "global/model_names", str(model_names), global_step=0 + ) + + # get the average model + pretrained_model = modelpool.load_pretrained_model() + merged_model = deepcopy(pretrained_model) + + for model_idx, model_name in tqdm( + enumerate(model_names), desc="Processing models" + ): + task_model = modelpool.load_model(model_name) + + task_vector = state_dict_sub( + task_model.state_dict(), + pretrained_model.state_dict(), + ) + if model_idx == 0: + # if is the first model, the merged task vector is equal to the task vector + ties_merging_state_dict = task_vector + else: + # if is not the first model, we need to merge the task vector with the previous merged task vector + merged_tv = state_dict_sub( + merged_model.state_dict(), + pretrained_model.state_dict(), + ) + tv_flat_checks = torch.vstack( + [ + state_dict_to_vector(merged_tv, remove_keys=self.remove_keys), + state_dict_to_vector(task_vector, remove_keys=self.remove_keys), + ] + ) + # perform the TIES merging + ties_merging_tv = ties_merging( + tv_flat_checks, + reset_thresh=self.threshold, + merge_func=self.merge_func, + ) + # convert the merged task vector back to a state dict + ties_merging_state_dict = vector_to_state_dict( + ties_merging_tv, + merged_model.state_dict(), + remove_keys=self.remove_keys, + ) + + for param_name, param in task_model.named_parameters(): + if not param.requires_grad: + continue + + merged_param = merged_model.get_parameter(param_name) + new_param = ( + merged_param + + self.scaling_factor * ties_merging_state_dict[param_name] + ) + merged_model.get_parameter(param_name).data = new_param + + if self.save_on_every_step: + self.save_merged_model(merged_model, model_idx) + + if self.evaluate_on_every_step: + self.taskpool._is_setup = False + self.taskpool._test_datasets = DictConfig( + {n: self._test_datasets[n] for n in model_names[: model_idx + 1]} + ) + report = self.taskpool.evaluate(deepcopy(merged_model)) + save_to_json(report, Path(self.log_dir) / f"report_{model_idx}.json") + + return merged_model + + def save_merged_model(self, merged_model: CLIPVisionModel, step: int): + os.makedirs(Path(self.log_dir) / "checkpoints", exist_ok=True) + torch.save( + merged_model.state_dict(), + Path(self.log_dir) / "checkpoints" / f"model_{step}.pth", + ) diff --git a/fusion_bench/method/opcm/utils.py b/fusion_bench/method/opcm/utils.py new file mode 100644 index 00000000..84dca237 --- /dev/null +++ b/fusion_bench/method/opcm/utils.py @@ -0,0 +1,73 @@ +from typing import Tuple + +import torch +from torch import Tensor, nn + +from fusion_bench.utils.parameters import state_dict_to_vector +from fusion_bench.utils.state_dict_arithmetic import state_dict_sub + + +def _svd(w: Tensor, full_matrices=True) -> Tuple[Tensor, Tensor, Tensor]: + """ + Perform Singular Value Decomposition (SVD) on a tensor. + + Args: + w (Tensor): The input tensor. + full_matrices (bool): Whether to compute the full-sized U and V matrices. + + Returns: + Tuple[Tensor, Tensor, Tensor]: The U, S, and V matrices from SVD. + """ + u, s, vh = torch.linalg.svd( + w, full_matrices=full_matrices, driver="gesvd" if w.is_cuda else None + ) + v = vh.T + return u, s, v + + +def svd( + w: Tensor, full_matrices=True, accelerator=None +) -> Tuple[Tensor, Tensor, Tensor]: + """ + Perform SVD on a tensor, optionally using a specified accelerator. + + Args: + w (Tensor): The input tensor. + full_matrices (bool): Whether to compute the full-sized U and V matrices. + accelerator (str): The device to perform the computation on. + + Returns: + Tuple[Tensor, Tensor, Tensor]: The U, S, and V matrices from SVD. + """ + if accelerator is None: + return _svd(w, full_matrices=full_matrices) + original_device = w.device + w = w.to(accelerator) + u, s, v = _svd(w) + return u.to(original_device), s.to(original_device), v.to(original_device) + + +def frobenius_inner_product(w1: Tensor, w2: Tensor) -> Tensor: + return torch.trace(w1.T @ w2) + + +def is_leaf_module(module: nn.Module) -> bool: + return len(list(module.children())) == 0 + + +def get_task_vector_norm(model: nn.Module, pretrained_model: nn.Module) -> Tensor: + """ + Get the vector norm of the task model. + + Args: + model (nn.Module): The task model. + pretrained_model (nn.Module): The pretrained model. + + Returns: + Tensor: The vector norm of the task model. + """ + return torch.linalg.norm( + state_dict_to_vector( + state_dict_sub(model.state_dict(), pretrained_model.state_dict()) + ) + ) diff --git a/fusion_bench/method/opcm/weight_average.py b/fusion_bench/method/opcm/weight_average.py new file mode 100644 index 00000000..f983c722 --- /dev/null +++ b/fusion_bench/method/opcm/weight_average.py @@ -0,0 +1,120 @@ +import os +import random +import time +from collections import defaultdict +from copy import deepcopy +from pathlib import Path +from typing import TYPE_CHECKING, List, Literal, Optional, Tuple, cast + +import lightning as L +import numpy as np +import torch +from omegaconf import DictConfig +from torch import Tensor, nn +from tqdm.auto import tqdm +from transformers import CLIPVisionModel + +from fusion_bench import BaseAlgorithm, BaseModelPool +from fusion_bench.mixins import LightningFabricMixin +from fusion_bench.taskpool import CLIPVisionModelTaskPool +from fusion_bench.utils.json import load_from_json, save_to_json + +if TYPE_CHECKING: + from torch.utils.tensorboard import SummaryWriter + + +class ContinualWeightAverageForCLIP( + BaseAlgorithm, + LightningFabricMixin, +): + def __init__( + self, + shuffle_order: bool = True, + seed: Optional[int] = None, + save_on_every_step: bool = True, + evaluate_on_every_step: bool = False, + **kwargs, + ): + """ + Continual Model Merging via Weight Average. + + Args: + shuffle_order (bool): whether to shuffle the order of the models. + seed (Optional[int]): the seed to use. + save_on_every_step (bool): whether to save the merged model on every step. + evaluate_on_every_step (bool): whether to evaluate the merged model on every step. + """ + self.shuffle_order = shuffle_order + self.seed = seed + self.save_on_every_step = save_on_every_step + self.evaluate_on_every_step = evaluate_on_every_step + super().__init__(**kwargs) + + def run(self, modelpool: BaseModelPool): + if self.seed is not None: + L.seed_everything(self.seed) + + model_names = modelpool.model_names + if self.shuffle_order: + random.shuffle(model_names) + + self.taskpool = cast(CLIPVisionModelTaskPool, self._program.taskpool) + self._test_datasets = deepcopy(self.taskpool._test_datasets) + """Configuration for the test datasets""" + + # log the model names + if self.log_dir is not None: + save_to_json(model_names, Path(self.log_dir) / "model_names.json") + tensorboard_summarywriter: "SummaryWriter" = self.tensorboard_summarywriter + tensorboard_summarywriter.add_text( + "global/model_names", str(model_names), global_step=0 + ) + + # get the average model + merged_model = modelpool.load_model(model_names[0]) + + if self.evaluate_on_every_step: + self.taskpool._is_setup = False + self.taskpool._test_datasets = DictConfig( + {model_names[0]: self._test_datasets[model_names[0]]} + ) + report = self.taskpool.evaluate(deepcopy(merged_model)) + save_to_json(report, Path(self.log_dir) / "report_0.json") + + if self.save_on_every_step: + self.save_merged_model(merged_model, 0) + + for model_idx, model_name in tqdm( + enumerate(model_names[1:]), desc="Processing models" + ): + model_idx += 1 + task_model = modelpool.load_model(model_name) + + for param_name, param in task_model.named_parameters(): + if not param.requires_grad: + continue + + task_param = param + merged_param = merged_model.get_parameter(param_name) + + new_param = (merged_param * model_idx + task_param) / (model_idx + 1) + merged_model.get_parameter(param_name).data = new_param + + if self.save_on_every_step: + self.save_merged_model(merged_model, model_idx) + + if self.evaluate_on_every_step: + self.taskpool._is_setup = False + self.taskpool._test_datasets = DictConfig( + {n: self._test_datasets[n] for n in model_names[: model_idx + 1]} + ) + report = self.taskpool.evaluate(deepcopy(merged_model)) + save_to_json(report, Path(self.log_dir) / f"report_{model_idx}.json") + + return merged_model + + def save_merged_model(self, merged_model: CLIPVisionModel, step: int): + os.makedirs(Path(self.log_dir) / "checkpoints", exist_ok=True) + merged_model.save_pretrained( + Path(self.log_dir) / "checkpoints" / f"merged_model_{step}" + ) diff --git a/fusion_bench/method/ties_merging/ties_merging.py b/fusion_bench/method/ties_merging/ties_merging.py index f95b9c6b..cac3a8f6 100644 --- a/fusion_bench/method/ties_merging/ties_merging.py +++ b/fusion_bench/method/ties_merging/ties_merging.py @@ -1,3 +1,13 @@ +R""" +Overview of Ties-Merging: + +1. Trim: For each task t, we trim the redundant parameters from the task vector $\tau_t$ to create $\hat{\tau}_t$ by keeping the top-k% values according to their magnitude and trimming the bottom $(100 - k)\%$ of the redundant parameters by resetting them to 0. This can be decomposed further as $\hat{\tau}_t = \hat{\gamma}_t \odot \hat{\mu}_t$. + +2. Elect: Next, we create an aggregate elected sign vector $\gamma_m$ for the merged model that resolves the disagreements in the sign for each parameter p across different models. To create the elected sign vector, we choose the sign with the highest total magnitude across all relevant models. For each parameter $p \in \{1, 2, \ldots, d\}$, we separate the values $\{\hat{\tau}_t^p\}_{t=1}^n$ based on their sign $(+1$ or $-1)$ and take their sum to calculate the total mass (i.e., total magnitude) in the positive and the negative direction. We then assign $\gamma_m^p$ as the sign with greater total movement. This can be efficiently computed using $\gamma_m^p = \text{sgn}(\sum_{t=1}^n \hat{\tau}_t^p)$. + +3. Disjoint Merge: Then, for each parameter p, we compute a disjoint mean by only keeping the parameter values from the models whose signs are the same as the aggregated elected sign and calculate their mean. Formally, let $A_p = \{t \in [n] \mid \hat{\gamma}_t^p = \gamma_m^p\}$, then $\tau_m^p = \frac{1}{|A_p|}\sum_{t\in A_p} \hat{\tau}_t^p$. Note that the disjoint mean always ignores the zero values. +""" + import logging from typing import Dict, List, Literal, Mapping, Union # noqa: F401 diff --git a/fusion_bench/metrics/continual_learning/backward_transfer.py b/fusion_bench/metrics/continual_learning/backward_transfer.py new file mode 100644 index 00000000..d784b4fb --- /dev/null +++ b/fusion_bench/metrics/continual_learning/backward_transfer.py @@ -0,0 +1,22 @@ +from typing import Dict + +import numpy as np + + +def compute_backward_transfer( + acc_Ti: Dict[str, float], acc_ii: Dict[str, float] +) -> float: + R""" + Compute the backward transfer (BWT) of a model on a set of tasks. + + Equation: + BWT = \frac{1}{n} \sum_{k=1}^{n} (acc_{Ti}[k] - acc_{ii}[k]) + + Returns: + float: The backward transfer of the model. + """ + assert set(acc_ii.keys()) == set(acc_Ti.keys()) + bwt = 0 + for task_name in acc_ii: + bwt += acc_Ti[task_name] - acc_ii[task_name] + return bwt / len(acc_ii) diff --git a/fusion_bench/mixins/clip_classification.py b/fusion_bench/mixins/clip_classification.py index c000d7ff..e1f87b21 100644 --- a/fusion_bench/mixins/clip_classification.py +++ b/fusion_bench/mixins/clip_classification.py @@ -161,12 +161,14 @@ def setup_zero_shot_classification_head( cache_dir, os.path.normpath(f"{task}_zeroshot_weights.pt") ) if os.path.exists(cache_file): - log.info(f"Loading cached zeroshot weights for task: {task}") zeroshot_weights = torch.load( cache_file, map_location="cpu", weights_only=True, ).detach() + log.info( + f"Loadded cached zeroshot weights for task: {task}, shape: {zeroshot_weights.shape}" + ) else: log.info( f"Construct zero shot classification head for task: {task}" @@ -180,6 +182,7 @@ def setup_zero_shot_classification_head( self.fabric.barrier() self.zeroshot_weights[task] = self.fabric.broadcast(zeroshot_weights, src=0) self.zeroshot_weights[task] = self.to_device(self.zeroshot_weights[task]) + self.fabric.barrier() del clip_classifier if torch.cuda.is_available(): diff --git a/fusion_bench/programs/fabric_fusion_program.py b/fusion_bench/programs/fabric_fusion_program.py index 5acf16a0..00a2ecf4 100644 --- a/fusion_bench/programs/fabric_fusion_program.py +++ b/fusion_bench/programs/fabric_fusion_program.py @@ -103,12 +103,13 @@ def _instantiate_and_setup( ) if compat_load_fn is not None: compat_load_fn = import_object(compat_load_fn) - print_bordered( - OmegaConf.to_yaml(config), - title="instantiate compat object", - style="magenta", - code_style="yaml", - ) + if rank_zero_only.rank == 0: + print_bordered( + OmegaConf.to_yaml(config), + title="instantiate compat object", + style="magenta", + code_style="yaml", + ) obj = compat_load_fn(config) else: raise ValueError( @@ -278,7 +279,11 @@ def _link_hydra_output(self): """ if self.log_dir is not None: # make symlink to the hydra output directory - hydra_output_dir = get_hydra_output_dir() + try: + hydra_output_dir = get_hydra_output_dir() + except Exception as e: + hydra_output_dir = None + if hydra_output_dir is not None: os.makedirs(self.log_dir, exist_ok=True) try: diff --git a/fusion_bench/scripts/cli.py b/fusion_bench/scripts/cli.py index 1401e41c..1ced1857 100755 --- a/fusion_bench/scripts/cli.py +++ b/fusion_bench/scripts/cli.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python3 """ This is the CLI script that is executed when the user runs the `fusion-bench` command. The script is responsible for parsing the command-line arguments, loading the configuration file, and running the fusion algorithm. diff --git a/fusion_bench/taskpool/clip_vision/taskpool.py b/fusion_bench/taskpool/clip_vision/taskpool.py index 38069ccc..ffacfc34 100644 --- a/fusion_bench/taskpool/clip_vision/taskpool.py +++ b/fusion_bench/taskpool/clip_vision/taskpool.py @@ -238,11 +238,13 @@ def _evaluate( else: test_loader = test_loader - for batch in ( - pbar := tqdm( - test_loader, desc="Evaluating", leave=False, dynamic_ncols=True - ) - ): + pbar = tqdm( + test_loader, + desc=f"Evaluating {task_name}", + leave=False, + dynamic_ncols=True, + ) + for batch in pbar: inputs, targets = batch outputs = classifier( inputs, @@ -309,11 +311,14 @@ def evaluate( } if name is not None: report["model_info"]["name"] = name - for task_name, test_dataloader in tqdm( + + # evaluate on each task + pbar = tqdm( self.test_dataloaders.items(), desc="Evaluating tasks", total=len(self.test_dataloaders), - ): + ) + for task_name, test_dataloader in pbar: classnames, templates = get_classnames_and_templates(task_name) self.on_task_evaluation_begin(classifier, task_name) classifier.set_classification_task(classnames, templates) diff --git a/fusion_bench/utils/__init__.py b/fusion_bench/utils/__init__.py index c4b9e914..b6058c6e 100644 --- a/fusion_bench/utils/__init__.py +++ b/fusion_bench/utils/__init__.py @@ -6,7 +6,8 @@ from .cache_utils import * from .devices import * from .dtype import parse_dtype -from .instantiate import instantiate +from .fabric import seed_everything_by_time +from .instantiate import instantiate, is_instantiable from .misc import * from .packages import import_object from .parameters import * diff --git a/fusion_bench/utils/dict.py b/fusion_bench/utils/dict.py new file mode 100644 index 00000000..7411ca68 --- /dev/null +++ b/fusion_bench/utils/dict.py @@ -0,0 +1,43 @@ +from copy import deepcopy +from typing import Iterable, List, Tuple, Union + + +def dict_get(d: dict, keys: Iterable[str], default=None): + return [d.get(k, default) for k in keys] + + +def dict_map(f, d: dict, *, max_level: int = -1, skip_levels=0, inplace=False): + """Apply function f to each element in dictionary d and return a new dictionary. + + Args: + f (callable): function to apply + d (dict): input dictionary + max_level (int, optional): maximum depth to apply function, -1 means unlimited. Defaults to -1. + skip_levels (int, optional): number of levels to skip. Defaults to 0. + inplace (bool, optional): whether to modify input dictionary in place. Defaults to False. + + Returns: + dict: transformed dictionary + """ + if not isinstance(d, dict): + raise TypeError("dict_map: d must be a dict") + + if inplace: + ans = d + else: + ans = deepcopy(d) + + def dict_map_impl(from_dict, to_dict, level): + if level == max_level: + return + for k in from_dict.keys(): + if isinstance(from_dict[k], dict): + dict_map_impl(from_dict[k], to_dict[k], level + 1) + else: + if level < skip_levels: + continue + else: + to_dict[k] = f(from_dict[k]) + + dict_map_impl(d, ans, 0) + return ans diff --git a/fusion_bench/utils/expr.py b/fusion_bench/utils/expr.py new file mode 100644 index 00000000..89cdd8cd --- /dev/null +++ b/fusion_bench/utils/expr.py @@ -0,0 +1,90 @@ +class pattern_query: + R""" + Examples: + + >>> f = pattern_query(lambda x: x==1) + >>> f(1) + True + >>> f(2) + False + + """ + + def __init__(self, func=None, type=None): + self.func = func + self.type = type + + def __call__(self, expr) -> bool: + if self.type is not None: + if not isinstance(expr, self.type): + return False + if self.func is not None: + return self.func(expr) + return True + + +def is_expr_match(pattern, expr): + R"""match pattern with a python expression expr. + + Examples: + + >>> is_expr_match('a', 'a') + True + >>> is_expr_match((object, 1), ('s',1)) + True + >>> is_expr_match((object, 1), ('s',2)) + False + >>> is_expr_match(((int, (int,)), (int, (int,)), (-1,)), + ((2146, (6,)), (1124, (97,)), (-1,))) + True + + match a numpy array whose shape is (1,2) + + >>> import numpy as np + >>> is_expr_match( + pattern_query(lambda arr: arr.shape==(1,2), np.ndarray), + np.zeros((1,2))) + True + + Args: + pattern: pattern to match + expr: python object + + Raises: + NotImplementedError: Unsupported type + + Returns: + bool + """ + + if type(pattern) == type: # type + if not isinstance(expr, pattern): + return False + + else: # instance + if isinstance(pattern, pattern_query): + return pattern(expr) + if type(pattern) != type(expr): + return False + + if isinstance(pattern, (int, float, str)): + if pattern != expr: + return False + elif isinstance(pattern, (tuple, list)): + if len(pattern) != len(expr): + return False + for i in range(len(pattern)): + if not is_expr_match(pattern[i], expr[i]): + return False + elif isinstance(pattern, dict): + if len(pattern) != len(expr): + return False + for k in pattern: + try: + if not is_expr_match(pattern[k], expr[k]): + return False + except: + return False + else: + raise NotImplementedError("Unsupported type: {}".format(type(pattern))) + return True diff --git a/fusion_bench/utils/fabric.py b/fusion_bench/utils/fabric.py new file mode 100644 index 00000000..4c2ea49b --- /dev/null +++ b/fusion_bench/utils/fabric.py @@ -0,0 +1,17 @@ +import time + +import lightning as L + + +def seed_everything_by_time(fabric: L.Fabric): + """ + Set seed for all processes by time. + """ + # set seed for all processes + if fabric.is_global_zero: + seed = int(time.time()) + else: + seed = None + fabric.barrier() + seed = fabric.broadcast(seed, src=0) + L.seed_everything(seed) diff --git a/fusion_bench/utils/instantiate.py b/fusion_bench/utils/instantiate.py index f34ab69b..ea101c1f 100644 --- a/fusion_bench/utils/instantiate.py +++ b/fusion_bench/utils/instantiate.py @@ -10,7 +10,7 @@ from hydra.errors import InstantiationException from hydra.types import ConvertMode, TargetConf from lightning_utilities.core.rank_zero import rank_zero_only -from omegaconf import OmegaConf, SCMode +from omegaconf import DictConfig, OmegaConf, SCMode from omegaconf._utils import is_structured_config from rich import print from rich.panel import Panel @@ -30,6 +30,12 @@ CATCH_EXCEPTION = True +def is_instantiable(config: Union[DictConfig, Any]) -> bool: + if OmegaConf.is_dict(config): + return "_target_" in config + return False + + def _resolve_callable_name(f: Callable[..., Any]) -> str: # Get the module name module_name = f.__module__ diff --git a/fusion_bench/utils/json.py b/fusion_bench/utils/json.py index 21a9e581..0e838a61 100644 --- a/fusion_bench/utils/json.py +++ b/fusion_bench/utils/json.py @@ -1,3 +1,33 @@ +import json +from pathlib import Path +from typing import Any, Union + + +def save_to_json(obj, path: Union[str, Path]): + """ + save an object to a json file + + Args: + obj (Any): the object to save + path (Union[str, Path]): the path to save the object + """ + with open(path, "w") as f: + json.dump(obj, f) + + +def load_from_json(path: Union[str, Path]) -> Union[dict, list]: + """load an object from a json file + + Args: + path (Union[str, Path]): the path to load the object + + Returns: + dict: the loaded object + """ + with open(path, "r") as f: + return json.load(f) + + def _is_list_of_dict(obj) -> bool: if not isinstance(obj, list): return False diff --git a/fusion_bench/utils/parameters.py b/fusion_bench/utils/parameters.py index 7edc391f..3c833df9 100644 --- a/fusion_bench/utils/parameters.py +++ b/fusion_bench/utils/parameters.py @@ -14,6 +14,7 @@ "get_parameter_statistics", "state_dict_to_vector", "vector_to_state_dict", + "trainable_state_dict", ] # Model conversion utils diff --git a/fusion_bench/utils/path.py b/fusion_bench/utils/path.py index 54aa98ca..91bcd5d0 100644 --- a/fusion_bench/utils/path.py +++ b/fusion_bench/utils/path.py @@ -1,7 +1,22 @@ import os +from typing import List def path_is_dir_and_not_empty(path: str): if path is None: return False return os.path.isdir(path) and len(os.listdir(path)) > 0 + + +def listdir_fullpath(dir: str) -> List[str]: + """list directory `dir`, return fullpaths + + Args: + dir (str): directory name + + Returns: + List[str]: a list of fullpaths + """ + assert os.path.isdir(dir), "Argument 'dir' must be a Directory" + names = os.listdir(dir) + return [os.path.join(dir, name) for name in names] diff --git a/fusion_bench/utils/plot/color_data.py b/fusion_bench/utils/plot/color_data.py new file mode 100644 index 00000000..d278c298 --- /dev/null +++ b/fusion_bench/utils/plot/color_data.py @@ -0,0 +1,1726 @@ +import numpy as np + +__all__ = ["get_color_data"] + +_color_data = [] +_color_data.append( + ( + (0.2472, 0.24, 0.6), + (0.6, 0.24, 0.442893), + (0.6, 0.547014, 0.24), + (0.24, 0.6, 0.33692), + (0.24, 0.353173, 0.6), + (0.6, 0.24, 0.563266), + (0.6, 0.426641, 0.24), + (0.263452, 0.6, 0.24), + (0.24, 0.473545, 0.6), + (0.516361, 0.24, 0.6), + (0.6, 0.306268, 0.24), + (0.383825, 0.6, 0.24), + (0.24, 0.593918, 0.6), + (0.395989, 0.24, 0.6), + (0.6, 0.24, 0.294104), + ) +) +_color_data.append( + ( + (0.858824, 0.00784314, 0.00784314), + (1.0, 0.266667, 0.0), + (1.0, 0.454902, 0.254902), + (0.482353, 0.188235, 0.0352941), + (1.0, 0.878431, 0.505882), + (0.701961, 0.745098, 0.823529), + (0.207843, 0.239216, 0.321569), + (0.0862745, 0.141176, 0.286275), + (0.337255, 0.403922, 0.623529), + ) +) +_color_data.append( + ( + (0.0, 0.0, 0.0), + (0.996078, 0.360784, 0.027451), + (0.996078, 0.988235, 0.0352941), + (0.541176, 0.713725, 0.027451), + (0.145098, 0.435294, 0.384314), + (0.00784314, 0.509804, 0.929412), + (0.152941, 0.113725, 0.490196), + (0.470588, 0.262745, 0.584314), + (0.890196, 0.0117647, 0.490196), + (0.905882, 0.027451, 0.129412), + ) +) +_color_data.append( + ( + (0.223529, 0.223529, 0.223529), + (0.211765, 0.137255, 0.113725), + (0.537255, 0.384314, 0.254902), + (0.423529, 0.32549, 0.207843), + (0.937255, 0.760784, 0.403922), + (0.996078, 0.905882, 0.388235), + (0.623529, 0.592157, 0.4), + (0.698039, 0.67451, 0.368627), + (0.415686, 0.45098, 0.376471), + (0.333333, 0.388235, 0.290196), + ) +) +_color_data.append( + ( + (0.458824, 0.141176, 0.141176), + (0.627451, 0.231373, 0.231373), + (0.380392, 0.278431, 0.207843), + (0.588235, 0.443137, 0.337255), + (0.592157, 0.419608, 0.282353), + (0.823529, 0.501961, 0.0941176), + (0.976471, 0.690196, 0.321569), + (0.396078, 0.396078, 0.176471), + (0.415686, 0.415686, 0.305882), + (0.631373, 0.631373, 0.247059), + ) +) +_color_data.append( + ( + (0.341176, 0.341176, 0.341176), + (0.643137, 0.105882, 0.0431373), + (0.192157, 0.105882, 0.0627451), + (0.792157, 0.733333, 0.611765), + (0.811765, 0.596078, 0.027451), + (0.105882, 0.254902, 0.160784), + (0.12549, 0.309804, 0.427451), + (0.0784314, 0.145098, 0.317647), + (0.658824, 0.603922, 0.701961), + (0.521569, 0.419608, 0.454902), + (0.486275, 0.0313725, 0.0941176), + ) +) +_color_data.append( + ( + (0.501961, 0.498039, 0.498039), + (0.796078, 0.513725, 0.498039), + (0.407843, 0.243137, 0.207843), + (0.803922, 0.686275, 0.603922), + (0.286275, 0.239216, 0.2), + (0.756863, 0.705882, 0.576471), + (0.698039, 0.72549, 0.564706), + (0.458824, 0.576471, 0.505882), + (0.572549, 0.631373, 0.670588), + (0.341176, 0.345098, 0.34902), + (0.262745, 0.341176, 0.447059), + ) +) +_color_data.append( + ( + (0.611765, 0.298039, 0.294118), + (1.0, 0.854902, 0.827451), + (0.858824, 0.560784, 0.458824), + (0.654902, 0.298039, 0.0823529), + (0.870588, 0.92549, 0.215686), + (0.501961, 0.686275, 0.0352941), + (0.215686, 0.364706, 0.164706), + (0.243137, 0.317647, 0.309804), + (0.686275, 0.192157, 0.247059), + ) +) +_color_data.append( + ( + (0.937255, 0.647059, 0.643137), + (0.67451, 0.0745098, 0.0431373), + (0.862745, 0.521569, 0.345098), + (0.968627, 0.603922, 0.0), + (0.388235, 0.427451, 0.396078), + (0.117647, 0.105882, 0.384314), + (0.0941176, 0.0823529, 0.290196), + (0.282353, 0.211765, 0.27451), + (0.647059, 0.568627, 0.611765), + ) +) +_color_data.append( + ( + (0.698039, 0.0156863, 0.0), + (0.921569, 0.494118, 0.431373), + (0.937255, 0.627451, 0.168627), + (0.992157, 0.815686, 0.490196), + (0.72549, 0.8, 0.0705882), + (0.317647, 0.490196, 0.0784314), + (0.172549, 0.360784, 0.0705882), + (0.360784, 0.407843, 0.533333), + (0.227451, 0.239216, 0.45098), + (0.0980392, 0.0666667, 0.25098), + (0.560784, 0.52549, 0.564706), + ) +) +_color_data.append( + ( + (0.658824, 0.341176, 0.329412), + (0.882353, 0.286275, 0.203922), + (0.890196, 0.788235, 0.65098), + (0.666667, 0.505882, 0.196078), + (0.666667, 0.698039, 0.403922), + (0.584314, 0.772549, 0.341176), + (0.713725, 0.760784, 0.917647), + (0.654902, 0.65098, 0.815686), + ) +) +_color_data.append( + ( + (0.623529, 0.145098, 0.12549), + (0.658824, 0.305882, 0.172549), + (0.243137, 0.117647, 0.0588235), + (0.945098, 0.752941, 0.635294), + (0.839216, 0.47451, 0.211765), + (0.827451, 0.72549, 0.435294), + (0.443137, 0.498039, 0.54902), + (0.247059, 0.309804, 0.372549), + (0.168627, 0.239216, 0.380392), + (0.298039, 0.176471, 0.196078), + ) +) +_color_data.append( + ( + (0.658824, 0.498039, 0.490196), + (0.721569, 0.184314, 0.0509804), + (0.803922, 0.545098, 0.458824), + (0.815686, 0.690196, 0.631373), + (0.94902, 0.87451, 0.717647), + (0.380392, 0.384314, 0.635294), + (0.231373, 0.207843, 0.552941), + (0.584314, 0.560784, 0.662745), + (0.466667, 0.27451, 0.34902), + (0.596078, 0.27451, 0.364706), + ) +) +_color_data.append( + ( + (0.835294, 0.576471, 0.560784), + (0.94902, 0.294118, 0.0509804), + (1.0, 0.733333, 0.2), + (0.996078, 0.94902, 0.443137), + (0.705882, 0.686275, 0.301961), + (0.415686, 0.545098, 0.121569), + (0.0196078, 0.207843, 0.462745), + (0.686275, 0.721569, 0.811765), + (0.427451, 0.0666667, 0.156863), + (0.854902, 0.196078, 0.27451), + ) +) +_color_data.append( + ( + (0.407843, 0.152941, 0.137255), + (0.658824, 0.560784, 0.533333), + (0.831373, 0.435294, 0.129412), + (0.894118, 0.827451, 0.764706), + (0.937255, 0.776471, 0.313725), + (0.239216, 0.270588, 0.462745), + (0.235294, 0.145098, 0.458824), + (0.364706, 0.239216, 0.431373), + (0.219608, 0.12549, 0.188235), + (0.552941, 0.129412, 0.223529), + (0.705882, 0.262745, 0.270588), + ) +) +_color_data.append( + ( + (0.454902, 0.0509804, 0.0235294), + (0.678431, 0.313725, 0.0), + (0.905882, 0.639216, 0.0705882), + (0.164706, 0.415686, 0.117647), + (0.854902, 0.960784, 1.0), + (0.121569, 0.509804, 0.733333), + (0.639216, 0.560784, 0.752941), + (0.145098, 0.113725, 0.164706), + (0.941176, 0.0, 0.00784314), + ) +) +_color_data.append( + ( + (0.282353, 0.227451, 0.223529), + (0.564706, 0.231373, 0.152941), + (0.639216, 0.392157, 0.333333), + (0.862745, 0.619608, 0.262745), + (0.964706, 0.788235, 0.52549), + (0.458824, 0.592157, 0.462745), + (0.239216, 0.45098, 0.247059), + (0.345098, 0.580392, 0.690196), + (0.184314, 0.392157, 0.490196), + (0.568627, 0.74902, 0.843137), + ) +) +_color_data.append( + ( + (0.764706, 0.556863, 0.541176), + (0.992157, 0.788235, 0.756863), + (0.294118, 0.192157, 0.105882), + (0.372549, 0.278431, 0.192157), + (0.294118, 0.270588, 0.188235), + (0.709804, 0.698039, 0.505882), + (0.870588, 0.878431, 0.690196), + (0.270588, 0.337255, 0.286275), + (0.698039, 0.435294, 0.447059), + ) +) +_color_data.append( + ( + (0.568627, 0.0431373, 0.0), + (0.560784, 0.227451, 0.2), + (0.662745, 0.333333, 0.0), + (0.847059, 0.639216, 0.427451), + (0.768627, 0.462745, 0.14902), + (0.0156863, 0.192157, 0.0980392), + (0.192157, 0.368627, 0.27451), + (0.4, 0.52549, 0.458824), + (0.0666667, 0.152941, 0.207843), + ) +) +_color_data.append( + ( + (0.745098, 0.0666667, 0.00392157), + (0.901961, 0.196078, 0.129412), + (0.356863, 0.054902, 0.0156863), + (0.682353, 0.415686, 0.0), + (0.835294, 0.627451, 0.0862745), + (0.980392, 0.780392, 0.258824), + (1.0, 0.905882, 0.654902), + (0.384314, 0.6, 0.878431), + (0.0627451, 0.258824, 0.513725), + (0.12549, 0.364706, 0.678431), + ) +) +_color_data.append( + ( + (0.941176, 0.494118, 0.45098), + (0.87451, 0.466667, 0.329412), + (1.0, 0.352941, 0.121569), + (0.972549, 0.8, 0.545098), + (0.913725, 0.803922, 0.607843), + (0.784314, 0.690196, 0.517647), + (0.458824, 0.372549, 0.188235), + (0.694118, 0.623529, 0.380392), + (0.435294, 0.309804, 0.376471), + (0.203922, 0.0784314, 0.121569), + ) +) +_color_data.append( + ( + (0.407843, 0.0666667, 0.0313725), + (0.862745, 0.403922, 0.027451), + (0.937255, 0.776471, 0.0), + (0.639216, 0.756863, 0.898039), + (0.313725, 0.368627, 0.647059), + (0.596078, 0.552941, 0.811765), + (0.152941, 0.0509804, 0.101961), + (0.870588, 0.533333, 0.639216), + (0.721569, 0.133333, 0.247059), + ) +) +_color_data.append( + ( + (0.352941, 0.0431373, 0.0), + (0.443137, 0.172549, 0.0196078), + (0.427451, 0.2, 0.054902), + (0.85098, 0.556863, 0.329412), + (0.960784, 0.752941, 0.556863), + (0.772549, 0.556863, 0.243137), + (0.803922, 0.533333, 0.137255), + (0.933333, 0.721569, 0.345098), + ) +) +_color_data.append( + ( + (0.921569, 0.494118, 0.431373), + (1.0, 0.721569, 0.219608), + (0.94902, 0.862745, 0.435294), + (0.670588, 0.878431, 0.937255), + (0.317647, 0.654902, 0.752941), + (0.129412, 0.517647, 0.631373), + (0.0901961, 0.337255, 0.494118), + (0.705882, 0.494118, 0.545098), + (0.533333, 0.235294, 0.305882), + (0.894118, 0.709804, 0.74902), + ) +) +_color_data.append( + ( + (0.203922, 0.0352941, 0.00392157), + (0.6, 0.164706, 0.0745098), + (0.341176, 0.0627451, 0.00392157), + (0.796078, 0.4, 0.0901961), + (0.796078, 0.482353, 0.192157), + (0.670588, 0.466667, 0.247059), + (0.384314, 0.243137, 0.027451), + (0.494118, 0.360784, 0.0235294), + (0.14902, 0.2, 0.0431373), + ) +) +_color_data.append( + ( + (0.470588, 0.14902, 0.0862745), + (0.909804, 0.360784, 0.215686), + (0.870588, 0.360784, 0.0509804), + (0.803922, 0.72549, 0.631373), + (0.439216, 0.27451, 0.0666667), + (0.92549, 0.854902, 0.752941), + (0.917647, 0.686275, 0.329412), + (0.32549, 0.454902, 0.47451), + ) +) +_color_data.append( + ( + (0.654902, 0.109804, 0.0), + (0.980392, 0.729412, 0.54902), + (0.94902, 0.596078, 0.219608), + (0.996078, 1.0, 0.858824), + (0.372549, 0.533333, 0.368627), + (0.866667, 0.929412, 0.890196), + (0.490196, 0.717647, 0.623529), + (0.490196, 0.662745, 0.67451), + (0.623529, 0.807843, 0.870588), + (0.8, 0.435294, 0.517647), + ) +) +_color_data.append( + ( + (0.905882, 0.380392, 0.27451), + (0.839216, 0.552941, 0.478431), + (0.654902, 0.439216, 0.360784), + (0.964706, 0.705882, 0.172549), + (0.819608, 0.741176, 0.298039), + (0.0352941, 0.494118, 0.705882), + (0.247059, 0.443137, 0.580392), + (0.0, 0.47451, 0.854902), + (0.643137, 0.419608, 0.478431), + ) +) +_color_data.append( + ( + (0.756863, 0.286275, 0.188235), + (0.737255, 0.372549, 0.2), + (0.784314, 0.627451, 0.490196), + (0.85098, 0.686275, 0.152941), + (0.333333, 0.298039, 0.176471), + (0.678431, 0.717647, 0.619608), + (0.211765, 0.321569, 0.568627), + (0.0, 0.0901961, 0.341176), + (0.454902, 0.301961, 0.313725), + (0.490196, 0.270588, 0.282353), + ) +) +_color_data.append( + ( + (0.231373, 0.176471, 0.164706), + (0.364706, 0.184314, 0.12549), + (0.533333, 0.266667, 0.113725), + (0.643137, 0.521569, 0.2), + (0.870588, 0.890196, 0.678431), + (0.678431, 0.772549, 0.670588), + (0.411765, 0.52549, 0.54902), + (0.4, 0.403922, 0.411765), + (0.517647, 0.509804, 0.513725), + ) +) +_color_data.append( + ( + (0.870588, 0.309804, 0.145098), + (0.980392, 0.372549, 0.192157), + (0.419608, 0.211765, 0.141176), + (0.898039, 0.611765, 0.45098), + (0.772549, 0.509804, 0.152941), + (0.835294, 0.733333, 0.2), + (0.596078, 0.819608, 0.690196), + (0.219608, 0.556863, 0.372549), + (0.239216, 0.419608, 0.521569), + ) +) +_color_data.append( + ( + (0.4, 0.101961, 0.0), + (0.980392, 0.807843, 0.733333), + (0.74902, 0.435294, 0.247059), + (0.823529, 0.603922, 0.34902), + (0.47451, 0.360784, 0.117647), + (0.835294, 0.737255, 0.505882), + (1.0, 0.909804, 0.662745), + (0.858824, 0.92549, 0.776471), + (0.458824, 0.25098, 0.290196), + ) +) +_color_data.append( + ( + (0.588235, 0.305882, 0.207843), + (0.741176, 0.529412, 0.384314), + (0.85098, 0.733333, 0.592157), + (0.823529, 0.72549, 0.392157), + (0.882353, 0.819608, 0.603922), + (0.584314, 0.670588, 0.435294), + (0.835294, 0.878431, 0.760784), + (0.313725, 0.435294, 0.105882), + ) +) +_color_data.append( + ( + (0.4, 0.32549, 0.290196), + (0.670588, 0.627451, 0.494118), + (0.796078, 0.803922, 0.772549), + (0.870588, 0.94902, 0.717647), + (0.670588, 0.760784, 0.615686), + (0.94902, 0.980392, 0.988235), + ) +) +_color_data.append( + ( + (0.803922, 0.309804, 0.0705882), + (1.0, 0.72549, 0.0941176), + (0.956863, 0.796078, 0.137255), + (0.952941, 0.980392, 0.572549), + (0.411765, 0.592157, 0.4), + (0.309804, 0.470588, 0.345098), + (0.298039, 0.286275, 0.54902), + (0.270588, 0.184314, 0.376471), + (0.878431, 0.101961, 0.207843), + (0.8, 0.0588235, 0.0745098), + ) +) +_color_data.append( + ( + (0.823529, 0.733333, 0.686275), + (0.407843, 0.427451, 0.266667), + (0.615686, 0.686275, 0.486275), + (0.337255, 0.435294, 0.392157), + (0.52549, 0.592157, 0.6), + (0.423529, 0.458824, 0.482353), + (0.392157, 0.494118, 0.568627), + (0.607843, 0.560784, 0.580392), + ) +) +_color_data.append( + ( + (0.854902, 0.392157, 0.14902), + (0.717647, 0.27451, 0.0392157), + (1.0, 0.556863, 0.321569), + (1.0, 0.807843, 0.462745), + (0.815686, 0.607843, 0.231373), + (0.658824, 0.596078, 0.270588), + (0.929412, 0.905882, 0.780392), + (0.811765, 0.760784, 0.478431), + (0.658824, 0.780392, 0.941176), + (0.423529, 0.603922, 0.843137), + (0.2, 0.415686, 0.701961), + ) +) +_color_data.append( + ( + (0.568627, 0.298039, 0.145098), + (0.705882, 0.698039, 0.498039), + (0.65098, 0.760784, 0.227451), + (0.392157, 0.729412, 0.584314), + (0.823529, 0.894118, 0.94902), + (0.227451, 0.192157, 0.4), + (0.501961, 0.239216, 0.447059), + (0.670588, 0.129412, 0.227451), + ) +) +_color_data.append( + ( + (0.870588, 0.341176, 0.0196078), + (0.811765, 0.368627, 0.0627451), + (0.937255, 0.717647, 0.14902), + (0.133333, 0.278431, 0.109804), + (0.254902, 0.541176, 0.321569), + (0.321569, 0.505882, 0.615686), + (0.368627, 0.447059, 0.576471), + (0.541176, 0.541176, 0.572549), + ) +) +_color_data.append( + ( + (0.745098, 0.301961, 0.0), + (0.882353, 0.494118, 0.0941176), + (0.827451, 0.811765, 0.454902), + (0.682353, 0.690196, 0.647059), + (0.611765, 0.690196, 0.341176), + (0.270588, 0.45098, 0.341176), + (0.160784, 0.278431, 0.372549), + (0.14902, 0.270588, 0.482353), + (0.0784314, 0.160784, 0.368627), + (0.658824, 0.635294, 0.807843), + ) +) +_color_data.append( + ( + (0.737255, 0.47451, 0.2), + (0.505882, 0.286275, 0.0470588), + (0.247059, 0.298039, 0.258824), + (0.396078, 0.545098, 0.431373), + (0.541176, 0.501961, 0.635294), + (0.215686, 0.117647, 0.329412), + (0.364706, 0.298039, 0.439216), + ) +) +_color_data.append( + ( + (0.92549, 0.866667, 0.756863), + (0.733333, 0.666667, 0.541176), + (0.584314, 0.533333, 0.411765), + (0.686275, 0.647059, 0.27451), + ) +) +_color_data.append( + ( + (1.0, 0.796078, 0.262745), + (0.921569, 0.886275, 0.592157), + (0.960784, 0.917647, 0.00784314), + (0.180392, 0.0627451, 0.580392), + (0.180392, 0.0117647, 0.333333), + (0.529412, 0.407843, 0.639216), + (0.737255, 0.188235, 0.341176), + (0.784314, 0.0705882, 0.231373), + (0.905882, 0.0, 0.0784314), + ) +) +_color_data.append( + ( + (0.692302, 0.618341, 0.375174), + (0.4533, 0.506783, 0.175158), + (0.814481, 0.0706188, 0.0264134), + (0.705882, 0.578744, 0.240635), + (0.606332, 0.199557, 0.0732433), + (0.788418, 0.814481, 0.359167), + (0.755657, 0.279011, 0.0189212), + (0.742077, 0.466728, 0.0988632), + (0.697078, 0.302922, 0.383215), + (1, 0.501961, 0), + (0.529412, 0.322988, 0.0804608), + (0.660639, 0.659358, 0.122408), + (0.936645, 0.79704, 0.0903487), + ) +) +_color_data.append( + ( + (0.797253, 0.904982, 0.410498), + (0.934691, 0.945708, 0.75346), + (0.769879, 0.92369, 0.977371), + (1, 0.566415, 0.0386511), + (1, 1, 0.4), + (1, 0.784756, 0.323308), + (0.909499, 0.582605, 0.44213), + (0.621866, 0.909026, 0.965408), + (1, 0.542397, 0.309712), + (0.645075, 0.644968, 0.978851), + (0.755657, 0.61117, 0.154498), + ) +) +_color_data.append( + ( + (0.855879, 0.665019, 0.302953), + (0.780926, 0.753979, 0.604883), + (0.807065, 0.511589, 0.285222), + (0.866682, 0.764462, 0.397528), + (0.735576, 0.755901, 0.876387), + (0.855879, 0.62414, 0.192096), + (1, 0.815946, 0.794202), + (1, 0.922957, 0.384054), + (0.733028, 0.519722, 0.0599069), + (0.788251, 0.806806, 0.950225), + (0.793454, 0.387564, 0.166766), + (0.877821, 0.790021, 0.310719), + (0.601816, 0.416114, 0.0997787), + (0.936645, 0.910887, 0.747143), + (0.60705, 0.625162, 0.72398), + ) +) +_color_data.append( + ( + (0.501961), + (0.660639), + (0.593454, 0.888609, 0.918547), + (0.346227, 0.71075, 0.927596), + (0.355077, 0.714931, 0.54519), + (0.2869, 0.583703, 0.280903), + (0.490944, 0.719463, 0.356405), + (0.377615, 0.477134, 0.916426), + (0.305684, 0.394965, 0.755657), + (0.168902, 0.250996, 0.633478), + (0.393668), + (0.43949, 0.503655, 0.619913), + ) +) +_color_data.append( + ( + (0.805432, 0.43006, 0.438804), + (0.963806, 0.591257, 0.601724), + (0.63801, 0.0991073, 0.147646), + (0.733028, 0.239811, 0.279622), + (0.873304, 0.567529, 0.217945), + (0.316747, 0.0594034, 0.0387579), + (0.316747, 0.224979, 0.242267), + (0.873304, 0.356405, 0.384848), + (0.606332, 0.370703, 0.114763), + (0.687785, 0.0596323, 0.0222934), + ) +) +_color_data.append( + ( + (0.823529, 0.788464, 0.657969), + (0.710414, 0.677302, 0.556176), + (0.687785, 0.640955, 0.477546), + (0.610864, 0.569268, 0.42414), + (0.493217, 0.434531, 0.340993), + (0.37557, 0.330877, 0.259648), + (0.271489, 0.239185, 0.187701), + (0.153841, 0.135546, 0.106355), + (0.271489, 0.262257, 0.201144), + (0.244526, 0.215335, 0.14963), + ) +) +_color_data.append( + ( + (0.714931, 0.604425, 0.0751812), + (0.950225, 0.85272, 0.062623), + (0.968322, 0.939544, 0.0737011), + (0.987869, 1, 0.364248), + (0.904982, 0.80087, 0.0986343), + (0.976333, 1, 0.501946), + (0.850675, 0.768994, 0.314717), + (0.565606, 0.469108, 0.0232242), + (0.976333, 1, 0.501946), + (1, 1, 0), + (0.63801, 0.562615, 0.258091), + ) +) +_color_data.append( + ( + (1, 0.753262, 0.0437629), + (0.945708, 0.661402, 0.128328), + (1, 0.854948, 0.112474), + (0.850675, 0.561089, 0.0324254), + (1, 0.70927, 0.144472), + (0.714931, 0.467216, 0.0763714), + (1, 0.79234, 0.292164), + (0.592767, 0.410986, 0.121248), + (1, 0.917754, 0.0541543), + (0.371038, 0.280095, 0.0870375), + ) +) +_color_data.append( + ( + (0.773754, 0.420615, 0.187213), + (0.443442, 0.110262, 0.100633), + (0.877699, 0.728923, 0.228702), + (0.882353, 0.597772, 0.124285), + (0.266972, 0.112123, 0.117922), + (0.683253, 0.00616464, 0.0506752), + (1, 0.8, 0.4), + (0.70135, 0.246342, 0.10016), + (0.969253, 0.932845, 0.614572), + (0.131228, 0.074464, 0.0730449), + ) +) +_color_data.append( + ( + (0.922972, 0.986419, 0.46389), + (0.501961, 0, 0), + (0.773754, 0.146609, 0.00296025), + (0.986419, 0.905287, 0.0534218), + (0.417227, 0.46154, 0.157656), + (0.900893, 0.727153, 0.205951), + (0.900893, 0.344152, 0.236088), + (0.447959, 0.27097, 0.0874037), + (0.877821, 0.53579, 0.248753), + (0.986419, 0.945861, 0.519921), + (0.358999, 0.36199, 0.0027924), + (0.986419, 0.918746, 0.320531), + (0.683253, 0.497841, 0.0674754), + ) +) +_color_data.append( + ( + (0.782803, 0.164904, 0.400458), + (0.909499, 0.613916, 0.204196), + (0.806577, 0.385397, 0.762768), + (0.698817, 0.873304, 0.295247), + (0.378897, 0.873304, 0.787549), + (1, 0.529198, 0.324819), + (1, 0.998367, 0.434775), + (0.873304, 0.150484, 0.255131), + (0.723598, 0.791043, 0.963806), + (0.85037, 0.558389, 0), + (1, 0.998856, 0.00207523), + (0.273106, 0.542992, 0.495583), + (1, 0.740871, 0.828473), + (0.630091, 0.148196, 0.579461), + (0.346715, 0.587594, 0.244526), + (0.927596, 0.725414, 0.204257), + (0.332128, 0.305196, 0.579187), + (1, 0.778332, 0.734707), + (0.501961, 0.501961, 0), + (0.501961, 0, 0.25098), + (1, 1, 0.762768), + ) +) +_color_data.append( + ( + (0.709133, 0.747539, 0.83711), + (0.813855, 0.974746, 0.996429), + (0.76527, 0.954757, 0.912932), + (0.581781, 0.801038, 0.828061), + (0.66154, 0.87277, 0.882353), + (0.616999, 0.753475, 0.909499), + (0.88957, 0.713878, 1), + (0.737484, 0.745327, 0.909499), + (0.775662, 0.632776, 0.918547), + (0.642084, 0.509957, 0.868772), + (0.507195, 0.428443, 0.710414), + (0.393545, 0.336843, 0.561089), + (0.342138, 0.241611, 0.452491), + ) +) +_color_data.append( + ( + (0.814481, 0.432822, 0.406287), + (1, 0.4, 0.4), + (0.954757, 0.215122, 0.0483253), + (0.268833, 0.246555, 0.506783), + (0.570138, 0.0971847, 0.0971847), + (0.409247, 0.384085, 0.823529), + (0.924651, 0.699779, 0.839963), + (0.349065, 0.298116, 0.642527), + (0.380087, 0.118044, 0.155291), + (0.640833, 0.661311, 0.886885), + (0.823529, 0.00888075, 0.0356909), + (0.211917, 0.157198, 0.411765), + ) +) +_color_data.append( + ( + (0.339361, 0.306752, 0.0416419), + (0.76817, 0.891402, 0.871962), + (0.610864, 0.327443, 0.219913), + (0.909773, 0.932128, 0.699825), + (0.418616, 0.48278, 0.719463), + (0.642527), + (0.814481, 0.554788, 0.334264), + (0.832578, 0.811261, 0.567498), + (0.696834, 0.400534, 0.293294), + (0.592264, 0.649119, 0.873304), + (0.380087, 0.377371, 0.298589), + (0.986908, 1, 0.771313), + (0.367086, 0.40798, 0.547509), + (0.266972, 0.247196, 0.155093), + (0.52784, 0.214603, 0.157061), + ) +) +_color_data.append( + ( + (0.742077, 0.0624857, 0.00605783), + (0, 0.501961, 0), + (0.891279, 0.721172, 0.777905), + (0.0620432, 0.521904, 0.704387), + (0.823529, 0.663981, 0.00828565), + (1, 0.0175937, 0.505959), + (0.975067, 1, 0.906294), + (0.162524, 0.167422, 0.153964), + (0.904982, 0.676844, 0.566705), + (0.475792, 0.675181, 0.189776), + (0.760174, 0.00823987, 0.412406), + (0, 0.390173, 0.773754), + (1, 0.904479, 0.279423), + (0.0184939, 0.438911, 0.147189), + ) +) +_color_data.append( + ( + (0.151827, 0.281636, 0.714931), + (0.753628, 0.82591, 0.991257), + (1, 0.937255, 0.224521), + (0.915969, 0.930159, 0.97409), + (1, 0.993332, 0.352972), + (0.208026, 0.25182, 0.529198), + (0.742367, 0.822126, 1), + (0.401907, 0.317494, 0.138964), + (0.98175, 0.967147, 0.930663), + (0.285069, 0.261799, 0.21828), + (0.508965, 0.787335, 0.578561), + (0.777829, 0.453574, 0.511559), + (0.647059, 0, 0.141192), + (0.968322, 0.591943, 0.687633), + ) +) +_color_data.append( + ( + (0.90045, 0.0204013, 0.0301823), + (0.829938, 0.725154, 1), + (1, 0.511666, 0.141085), + (0.566842, 0.967407, 1), + (1, 0.926772, 0.151904), + (1), + (0.759213, 0.886885, 0.319265), + (0.4, 0.8, 1), + (0.959274, 0.614496, 0.466316), + (0.790433, 0.450294, 1), + (0.895369, 0.716976, 0.346883), + (1, 0.0980392, 0.392157), + (1, 1, 0.392157), + (1, 0.4, 0.4), + (0.545876, 1, 0.558755), + (0.391867, 0.710414, 0.663966), + (1, 0.8, 0.4), + (1, 0.4, 0.4), + (1, 0, 1), + (0.563638, 0.606256, 0.935851), + (0.868772, 0.73959, 0.218616), + ) +) +_color_data.append( + ( + (0.70135, 0.093019, 0.00140383), + (0.289647, 0.222614, 0.484169), + (0.98677, 0.98793, 0.458686), + (0.42948, 0.524086, 0.719463), + (0.30808, 0.443137, 0.124895), + (0.895125, 0.71606, 0.0964523), + (0.138415, 0.184848, 0.429862), + (0.882353, 0.0253147, 0.11165), + (0.895125, 0.870893, 0.632624), + ) +) +_color_data.append( + ( + (0.90045, 0.765209, 0.745602), + (0.864256, 0.544503, 0.601099), + (0.719463, 0.374975, 0.35935), + (0.312215, 0.134813, 0.182895), + (0.488685, 0.199069, 0.220294), + (0.963806, 0.945785, 0.623575), + (0.299687, 0.352941, 0.114382), + (0.606516, 0.669688, 0.306233), + (1, 0.886915, 0.754116), + (0.704433, 0.864256, 0.469459), + (1, 0.978103, 0.943175), + (0.280537, 0.234745, 0.149096), + (0.338262, 0.480644, 0.141192), + ) +) +_color_data.append( + ( + (0.73, 0.245061, 0.1971), + (0.1971, 0.502247, 0.73), + (0.535616, 0.73, 0.1971), + (0.571276, 0.1971, 0.73), + (0.1971, 0.73, 0.537908), + (0.73, 0.504539, 0.1971), + (0.1971, 0.242769, 0.73), + (0.276137, 0.73, 0.1971), + (0.73, 0.1971, 0.629245), + (0.1971, 0.662614, 0.73), + (0.695982, 0.73, 0.1971), + (0.41091, 0.1971, 0.73), + (0.1971, 0.73, 0.377541), + (0.73, 0.344173, 0.1971), + (0.1971, 0.403135, 0.73), + ) +) +_color_data.append( + ( + (0.5, 0.5, 0.4), + (0.11, 0.75, 0.8), + (0.04, 1, 0.8), + (0.5, 0.5, 0.6), + (0.67, 0.33, 0.5), + (0.33, 0.5, 0.6), + (0, 0.67, 0.6), + (0.17, 0.9, 0.7), + (0, 0.5, 0.6), + (0.17, 0.33, 0.6), + ) +) +_color_data.append( + ( + (0.64, 0.5, 0.7), + (0.11, 0.75, 0.7), + (0.5, 0.7, 0.6), + (0.2, 0.66, 0.66), + (0.7, 0.4, 0.8), + (0.15, 0.67, 0.75), + (0.5, 0.6, 0.7), + (0.17, 0.6, 0.6), + (0.35, 0.33, 0.75), + (0.25, 0.67, 0.6), + ) +) +_color_data.append( + ( + (0.61, 0.7, 1), + (0.17, 0.4, 0.65), + (0.64, 0.5, 0.75), + (0.45, 0.4, 0.7), + (0.55, 0.8, 0.6), + (0.64, 0.2, 0.7), + (0.4, 0.5, 0.5), + (0.56, 0.6, 0.85), + (0.58, 0.5, 0.6), + (0.45, 0.7, 0.7), + ) +) +_color_data.append( + ( + (0, 1, 1), + (0.1, 0.7, 0.9), + (0, 0.75, 0.8), + (0.05, 0.8, 1), + (0.05, 1, 0.8), + (0, 0.7, 1), + (0, 1, 0.7), + (0, 0.8, 0.9), + (0.05, 0.9, 0.6), + (0.05, 0.7, 0.8), + ) +) +_color_data.append( + ( + (0.55, 1, 0.7), + (0.06, 1, 0.9), + (0.25, 1, 0.55), + (0.11, 0.9, 0.85), + (0.5, 1, 0.5), + (0.2, 1, 0.7), + (0.08, 1, 0.7), + (0.5, 0.8, 0.75), + (0.45, 1, 0.5), + (0.6, 0.5, 0.9), + ) +) +_color_data.append( + ( + (0.12, 0.8, 0.8), + (0.17, 0.6, 0.5), + (0.1, 0.83, 0.96), + (0.1, 1, 0.7), + (0.11, 0.6, 0.8), + (0.06, 0.75, 0.8), + (0.13, 0.67, 0.96), + (0.11, 0.75, 0.64), + (0.11, 0.5, 0.96), + (0.08, 0.67, 0.85), + ) +) +_color_data.append( + ( + (0.04, 1, 1), + (0.12, 1, 0.9), + (0.5, 0.5, 0.5), + (0.15, 0.7, 0.9), + (0.06, 1, 0.75), + (0.08, 1, 1), + (0.67, 0.3, 0.7), + (0.1, 0.5, 0.8), + (0, 0.67, 0.8), + (0.06, 0.7, 0.9), + ) +) +_color_data.append( + ( + (0.94, 0.7, 0.9), + (0, 0.5, 1), + (0.9, 0.5, 0.7), + (0.05, 0.5, 0.85), + (0.9, 0.67, 0.85), + (0.05, 0.6, 1), + (0.9, 0.8, 0.9), + (0.08, 0.8, 1), + (0, 0.7, 0.9), + (0.12, 0.7, 0.9), + ) +) +_color_data.append( + ( + (0.08, 1, 0.88), + (0.11, 1, 0.66), + (0.17, 0.67, 0.66), + (0, 0.33, 0.66), + (0.11, 0.9, 0.85), + (0.15, 0.5, 0.5), + (0, 0.5, 0.85), + (0.08, 1, 0.7), + (0.06, 0.75, 0.88), + (0.2, 1, 0.56), + ) +) +_color_data.append( + ( + (0.12, 0.8, 0.8), + (0.17, 0.67, 0.48), + (0.11, 0.6, 0.7), + (0.06, 0.75, 0.76), + (0.17, 0.75, 0.64), + (0.11, 0.75, 0.64), + (0.13, 0.67, 0.85), + (0.17, 0.9, 0.6), + (0.08, 0.67, 0.9), + (0.17, 0.5, 0.64), + ) +) +_color_data.append( + ( + (0.33, 0.5, 0.6), + (0.11, 0.75, 0.9), + (0.5, 0.5, 0.5), + (0.83, 0.33, 0.75), + (0.17, 0.5, 0.5), + (0.67, 0.33, 0.75), + (0.83, 0.5, 0.5), + (0.17, 0.67, 0.65), + (0.92, 0.67, 0.6), + (0.08, 0.67, 0.75), + ) +) +_color_data.append( + ( + (0.22, 1, 0.51), + (0.21, 0.8, 0.85), + (0.28, 0.75, 0.6), + (0.25, 1, 0.85), + (0.45, 1, 0.55), + (0.22, 1, 0.68), + (0.3, 1, 0.51), + (0.28, 0.6, 0.85), + (0.17, 0.67, 0.51), + (0.22, 0.4, 0.85), + ) +) +_color_data.append( + ( + (0, 1, 0.68), + (0.15, 1, 0.25), + (0.03, 1, 0.85), + (0, 1, 0.4), + (0.05, 0.9, 0.7), + (0.1, 1, 0.35), + (0.04, 1, 0.68), + (0.15, 1, 0.35), + (0.1, 0.9, 0.7), + (0.05, 1, 0.5), + ) +) +_color_data.append( + ( + (0.08, 1, 0.68), + (0.17, 0.5, 0.34), + (0.11, 0.75, 0.68), + (0.08, 0.67, 0.51), + (0.12, 0.8, 0.85), + (0.06, 0.9, 0.6), + (0.08, 0.8, 0.85), + (0.11, 1, 0.51), + (0.11, 0.6, 0.85), + (0.12, 1, 0.68), + ) +) +_color_data.append( + ( + (0.21, 1, 0.56), + (0.13, 0.83, 0.8), + (0.22, 1, 0.42), + (0.25, 0.8, 0.7), + (0.17, 0.67, 0.42), + (0.2, 0.83, 0.84), + (0.12, 0.8, 0.6), + (0.17, 0.6, 0.7), + (0.17, 1, 0.5), + (0.21, 0.8, 0.7), + ) +) +_color_data.append( + ( + (0.06, 1, 0.85), + (0.11, 0.9, 0.8), + (0, 0.5, 0.44), + (0.06, 0.8, 0.8), + (0.08, 1, 0.5), + (0.17, 0.67, 0.66), + (0.83, 0.5, 0.44), + (0.13, 1, 0.7), + (0.65, 0.5, 0.6), + (0.17, 0.9, 0.6), + ) +) +_color_data.append( + ( + (0.04, 1, 0.8), + (0.08, 0.8, 0.9), + (0.07, 1, 0.75), + (0.08, 1, 1), + (0.03, 0.8, 0.75), + (0.05, 0.8, 0.9), + (0.06, 1, 0.65), + (0.06, 0.6, 0.9), + (0.07, 0.8, 0.6), + (0.11, 0.6, 0.8), + ) +) +_color_data.append( + ( + (0.58, 1, 0.5), + (0.12, 1, 0.9), + (0, 1, 0.75), + (0.5, 1, 0.6), + (0.67, 0.5, 0.7), + (0.17, 1, 0.6), + (0.9, 1, 0.75), + (0.11, 0.7, 0.75), + (0.61, 1, 0.9), + (0.08, 1, 1), + ) +) +_color_data.append( + ( + (0.6, 0.7, 0.8), + (0.22, 1, 0.7), + (0.75, 0.6, 0.7), + (0.5, 1, 0.65), + (0.7, 0.6, 0.7), + (0.15, 0.7, 0.65), + (0.63, 0.6, 0.7), + (0.4, 0.7, 0.7), + (0.55, 1, 0.75), + (0.125, 0.9, 0.9), + ) +) +_color_data.append( + ( + (0.08, 1, 1), + (0.17, 0.8, 0.5), + (0, 1, 0.8), + (0.06, 1, 0.8), + (0.33, 0.5, 0.5), + (0.08, 1, 0.6), + (0.5, 0.5, 0.5), + (0.04, 1, 1), + (0.11, 1, 0.8), + (0, 0.75, 0.9), + ) +) +_color_data.append( + ( + (0.11, 0.38, 0.64), + (0.08, 0.29, 0.5), + (0.08, 0.25, 0.64), + (0.08, 0.6, 0.6), + (0.11, 0.33, 0.72), + (0.11, 0.43, 0.5), + (0.13, 0.44, 0.72), + (0.08, 0.5, 0.6), + (0.06, 0.25, 0.7), + (0.11, 0.7, 0.55), + ) +) +_color_data.append( + ( + (0, 1, 0.72), + (0.06, 1, 0.9), + (0.17, 1, 0.4), + (0.11, 1, 0.72), + (0.06, 1, 0.72), + (0.12, 1, 0.9), + (0.5, 0.5, 0.5), + (0.17, 1, 0.6), + (0, 0.6, 0.6), + (0.08, 1, 0.8), + ) +) +_color_data.append( + ( + (0.6, 0.6, 0.7), + (0.11, 0.8, 0.75), + (0.2, 1, 0.55), + (0.5, 0.7, 0.6), + (0.7, 0.55, 0.9), + (0.13, 1, 0.8), + (0.58, 0.8, 0.8), + (0.28, 0.7, 0.7), + (0.5, 1, 0.5), + (0.55, 0.6, 0.8), + ) +) +_color_data.append( + ( + (0.05, 1, 1), + (0.1, 1, 0.95), + (0, 0.7, 0.9), + (0.15, 0.7, 0.85), + (0.83, 0.33, 0.75), + (0.07, 0.7, 0.9), + (0.17, 0.7, 0.6), + (0.08, 1, 1), + (0.67, 0.4, 0.9), + (0.11, 1, 0.75), + ) +) +_color_data.append( + ( + (0.42, 0.67, 0.75), + (0.17, 1, 0.75), + (0.05, 0.7, 1), + (0.5, 0.67, 0.75), + (0.67, 0.5, 1), + (0.08, 1, 1), + (0.25, 0.67, 0.75), + (0.11, 0.75, 1), + (0.33, 0.33, 0.75), + (0.11, 1, 0.9), + ) +) +_color_data.append( + ( + (0.5, 0.5, 0.4), + (0.08, 0.9, 0.8), + (0.42, 0.67, 0.6), + (0.13, 0.8, 0.85), + (0.5, 0.67, 0.6), + (0.17, 0.9, 0.6), + (0.67, 0.5, 0.7), + (0.1, 0.75, 0.8), + (0, 0.75, 0.8), + (0.04, 0.8, 1), + ) +) +_color_data.append( + ( + (0.22, 1, 0.6), + (0.01, 0.8, 0.8), + (0.61, 0.75, 1), + (0.11, 1, 0.75), + (0.67, 0.6, 0.9), + (0.17, 1, 0.5), + (0.06, 1, 0.75), + (0.8, 0.5, 0.6), + (0.25, 1, 0.5), + (0.58, 0.67, 0.75), + ) +) +_color_data.append( + ( + (0.58, 0.67, 0.66), + (0.17, 1, 0.66), + (0.45, 0.75, 0.6), + (0.12, 0.7, 0.7), + (0.25, 0.7, 0.6), + (0.58, 0.5, 0.8), + (0.11, 1, 0.66), + (0.06, 0.75, 0.88), + (0.5, 0.5, 0.44), + (0.67, 0.33, 0.66), + ) +) +_color_data.append( + ( + (0.12, 1, 0.9), + (0.08, 1, 0.7), + (0.08, 1, 0.92), + (0.17, 1, 0.5), + (0.12, 0.7, 0.8), + (0, 0.33, 0.6), + (0.11, 1, 0.8), + (0.5, 0.5, 0.5), + (0.17, 1, 0.7), + (0.06, 1, 0.69), + ) +) +_color_data.append( + ( + (0, 0.8, 0.85), + (0.11, 0.75, 0.92), + (0.17, 0.6, 0.52), + (0.06, 0.75, 0.92), + (0.5, 0.5, 0.55), + (0.17, 0.67, 0.69), + (0.67, 0.33, 0.69), + (0.5, 0.33, 0.69), + (0.94, 0.5, 0.69), + (0.25, 0.6, 0.7), + ) +) +_color_data.append( + ( + (0.210202, 0.478028, 0.802198), + (0.707272, 0.367344, 0.225726), + (0.0, 0.547861, 0.489169), + (0.645179, 0.359284, 0.673737), + (0.479521, 0.479449, 0.089445), + (0.0, 0.523964, 0.74671), + (0.761821, 0.309931, 0.391207), + (0.0, 0.538075, 0.301193), + (0.430639, 0.436709, 0.782913), + (0.636472, 0.41387, 0.143178), + (0.0, 0.545007, 0.602897), + (0.722244, 0.319989, 0.572676), + (0.359842, 0.508864, 0.144524), + (0.0, 0.498754, 0.793374), + (0.737905, 0.340553, 0.285097), + ) +) +_color_data.append( + ( + (0.547741, 0.678141, 0.919876), + (0.870588, 0.604825, 0.492284), + (0.315739, 0.73984, 0.687293), + (0.811653, 0.601228, 0.82585), + (0.693018, 0.679972, 0.419934), + (0.365738, 0.716057, 0.878593), + (0.908568, 0.575295, 0.613305), + (0.450904, 0.730731, 0.549649), + (0.661563, 0.648537, 0.906077), + (0.816152, 0.633087, 0.441625), + (0.278846, 0.736466, 0.771928), + (0.872286, 0.580685, 0.750455), + (0.603462, 0.704196, 0.448275), + (0.475063, 0.694449, 0.913188), + (0.893142, 0.590291, 0.534183), + ) +) +_color_data.append( + ( + (0.23792, 0.688748, 1.0), + (1.0, 0.519592, 0.309672), + (0.0, 0.790415, 0.705117), + (0.936355, 0.506531, 0.981107), + (0.686959, 0.690573, 0.0577263), + (0.0, 0.75636, 1.0), + (1.0, 0.427217, 0.558872), + (0.0, 0.77627, 0.422678), + (0.610912, 0.62653, 1.0), + (0.92057, 0.591746, 0.176036), + (0.0, 0.786495, 0.875359), + (1.0, 0.443453, 0.829825), + (0.507056, 0.733903, 0.173624), + (0.0, 0.719486, 1.0), + (1.0, 0.477056, 0.399999), + ) +) +_color_data.append( + ( + (0.368417, 0.506779, 0.709798), + (0.880722, 0.611041, 0.142051), + (0.560181, 0.691569, 0.194885), + (0.922526, 0.385626, 0.209179), + (0.528488, 0.470624, 0.701351), + (0.772079, 0.431554, 0.102387), + (0.363898, 0.618501, 0.782349), + (1, 0.75, 0), + (0.647624, 0.37816, 0.614037), + (0.571589, 0.586483, 0.0), + (0.915, 0.3325, 0.2125), + (0.400822, 0.522007, 0.85), + (0.972829, 0.621644, 0.073362), + (0.736783, 0.358, 0.503027), + (0.280264, 0.715, 0.429209), + ) +) +_color_data.append( + ( + (0.29, 0.588, 0.612), + (0.886243, 0.527215, 0.0910023), + (0.613966, 0.37652, 0.585084), + (0.521981, 0.66, 0.0942065), + (0.820916, 0.341417, 0.22514), + (0.436075, 0.482355, 0.72), + (0.915458, 0.67329, 0.0122632), + (0.687223, 0.3576, 0.441196), + (0.217839, 0.655694, 0.494605), + (0.868187, 0.436936, 0.13357), + (0.517011, 0.406193, 0.72), + (0.759193, 0.664755, 0.0), + (0.719709, 0.342, 0.360447), + (0.280656, 0.563875, 0.624787), + (0.868374, 0.522271, 0.0853896), + ) +) +_color_data.append( + ( + (0.65, 0.0, 0.0), + (0.0504678, 0.526626, 0.627561), + (0.752461, 0.362306, 0.125339), + (0.435888, 0.259065, 0.71028), + (0.461492, 0.563303, 0.0104797), + (0.659814, 0.212037, 0.300311), + (0.212151, 0.39271, 0.8), + (0.784922, 0.524612, 0.0407096), + (0.515278, 0.224, 0.530342), + (0.111025, 0.56, 0.418696), + (0.647864, 0.308204, 0.0196601), + (0.407876, 0.275406, 0.780311), + (0.705543, 0.589505, 0.0), + (0.653126, 0.213375, 0.311456), + (0.124612, 0.460311, 0.709534), + ) +) +_color_data.append( + ( + (0.0684356, 0.645252, 0.782123), + (0.98993, 0.699651, 0.0271887), + (0.450866, 0.379481, 1.0), + (0.369422, 0.7, 0.229826), + (0.942659, 0.463296, 0.151884), + (0.214511, 0.528391, 0.957413), + (0.827693, 0.730855, 0.0), + (0.546532, 0.322857, 0.883671), + (0.0575287, 0.697632, 0.634101), + (0.971874, 0.609371, 0.0759396), + (0.240278, 0.513454, 0.954279), + (0.664468, 0.716058, 0.0382467), + (0.535911, 0.329201, 0.887952), + (0.0930023, 0.661592, 0.700348), + (0.987599, 0.716733, 0.0176115), + ) +) +_color_data.append( + ( + (0.21099, 0.531208, 0.953188), + (0.985248, 0.676238, 0.0398315), + (0.519913, 0.338384, 0.950217), + (0.0358167, 0.691123, 0.698773), + (0.68343, 0.28, 0.602415), + (0.337228, 0.447663, 1.0), + (0.969644, 0.598219, 0.081962), + (0.463466, 0.37192, 1.0), + (0.285145, 0.714257, 0.500399), + (0.64286, 0.28, 0.664831), + (0.188288, 0.550488, 0.919235), + (0.950576, 0.695346, 0.0556806), + (0.475066, 0.365124, 0.975383), + (0.117539, 0.682865, 0.669161), + (0.637866, 0.284291, 0.679587), + ) +) +_color_data.append( + ( + (0.328624, 0.538662, 0.894982), + (0.7, 0.6825, 0.63), + (0.125288, 0.70818, 0.634349), + (0.613538, 0.367936, 0.741154), + (0.977524, 0.65262, 0.0606854), + (0.463744, 0.456754, 0.9), + (0.558991, 0.72, 0.0458291), + (0.680096, 0.342, 0.596007), + (0.245115, 0.603908, 0.804138), + (0.956122, 0.758684, 0.000795641), + (0.574241, 0.390864, 0.838631), + (0.224072, 0.696849, 0.543647), + (0.971426, 0.677947, 0.0463239), + (0.404069, 0.494152, 0.890438), + (0.557025, 0.723664, 0.0903003), + ) +) +_color_data.append( + ( + (0.9, 0.378, 0.0), + (0.50284, 0.348442, 0.978155), + (0.974953, 0.624767, 0.0676258), + (0.717359, 0.28, 0.550217), + (0.440683, 0.7, 0.13913), + (0.7, 0.294, 0.0), + (0.0, 0.56, 0.8), + (1.0, 0.37, 0.1), + (0.704, 0.32, 0.8), + (0.641118, 0.710124, 0.0), + (0.852394, 0.259521, 0.329344), + (0.524898, 0.335476, 0.937755), + (0.960617, 0.553086, 0.104563), + (0.717215, 0.277933, 0.549113), + (0.666071, 0.712897, 0.0), + ) +) +_color_data.append( + ( + (0.028, 0.5376, 0.5936), + (0.75, 0.315, 0.0), + (0.531753, 0.331477, 0.920616), + (0.627887, 0.708654, 0.0), + (0.237882, 0.510711, 0.979357), + (0.975692, 0.628459, 0.0656322), + (0.629898, 0.28, 0.684772), + (0.198854, 0.7, 0.446913), + (0.910038, 0.300188, 0.226913), + (0.440765, 0.385541, 1.0), + (0.797526, 0.718694, 0.00486471), + (0.792386, 0.272363, 0.429254), + (0.289887, 0.478466, 0.985608), + (0.96081, 0.554048, 0.104292), + (0.633426, 0.29116, 0.697739), + ) +) +_color_data.append( + ( + (0.227469, 0.518025, 0.972963), + (0.680612, 0.714512, 0.0), + (0.0173758, 0.686099, 0.720851), + (0.993469, 0.717345, 0.0176339), + (0.357314, 0.435612, 1.0), + (0.423978, 0.7, 0.160391), + (0.14722, 0.582224, 0.876665), + (0.825059, 0.730562, 0.0), + (0.485021, 0.35902, 0.995068), + (0.13832, 0.7, 0.523957), + (0.976518, 0.632587, 0.0634027), + (0.191651, 0.54792, 0.922538), + (0.65508, 0.711676, 0.0), + (0.493464, 0.354032, 0.983338), + (0.0448197, 0.688434, 0.678706), + ) +) +_color_data.append( + ( + (0.34398, 0.49112, 0.89936), + (0.97, 0.606, 0.081), + (0.91, 0.318, 0.243), + (0.448, 0.69232, 0.1538), + (0.62168, 0.2798, 0.6914), + (0.09096, 0.6296, 0.85532), + (0.46056, 0.40064, 0.81392), + (0.94, 0.462, 0.162), + (0.0, 0.7, 0.7), + (0.827051, 0.418034, 0.0243459), + (0.551175, 0.320148, 0.872063), + (0.726941, 0.71966, 0.0), + (0.868071, 0.256386, 0.303216), + (0.241869, 0.506504, 0.990243), + (0.957391, 0.536954, 0.115045), + ) +) +_color_data.append( + ( + (0.286842, 0.530395, 1.0), + (0.56, 0.7, 0.7), + (0.532474, 0.388, 0.736579), + (0.063618, 0.694106, 0.821342), + (0.420451, 0.450297, 0.989958), + (0.351133, 0.745, 0.298103), + (0.604213, 0.388, 0.626211), + (0.201578, 0.584574, 0.981873), + (0.0688702, 0.745326, 0.661078), + (0.813624, 0.605623, 0.246924), + (0.323, 0.510002, 0.990107), + (0.53231, 0.750962, 0.159044), + (0.549235, 0.389647, 0.713718), + (0.123497, 0.657278, 0.857613), + (0.840785, 0.741427, 0.174663), + ) +) +_color_data.append( + ( + (0.9, 0.36, 0.054), + (0.365248, 0.427802, 0.758297), + (0.945109, 0.593901, 0.0), + (0.645957, 0.253192, 0.685109), + (0.285821, 0.56, 0.450773), + (0.7, 0.336, 0.0), + (0.491486, 0.345109, 0.8), + (0.71788, 0.568653, 0.0), + (0.70743, 0.224, 0.542415), + (0.287228, 0.490217, 0.664674), + (0.982289, 0.577132, 0.0115425), + (0.587674, 0.287728, 0.75007), + (0.426209, 0.558155, 0.2778), + (0.943149, 0.414556, 0.0714083), + (0.414974, 0.393632, 0.784299), + ) +) +_color_data.append( + ( + (1.0, 0.4, 0.0), + (0.655728, 0.8, 0.0), + (0.0, 0.742291, 0.873126), + (1.0, 0.656408, 0.0), + (0.893126, 0.4, 0.767184), + (0.295048, 0.8, 0.286932), + (0.238758, 0.610466, 1.0), + (1.0, 0.325204, 0.406504), + (0.0, 0.786874, 0.739379), + (1.0, 0.520437, 0.0), + (0.752933, 0.41765, 1.0), + (0.557281, 0.8, 0), + (1.0, 0.068116, 0.0851449), + (0, 0.722602, 0.932195), + (1.0, 0.715476, 0), + ) +) +_color_data.append( + ( + (0.3, 0.68, 0.88), + (0.962492, 0.612461, 0.301114), + (0.659963, 0.445022, 0.850093), + (0.557756, 0.76, 0.304674), + (0.889907, 0.406019, 0.450155), + (0.462306, 0.562616, 1.0), + (0.994953, 0.774767, 0.213626), + (0.741359, 0.424, 0.690217), + (0.311025, 0.76, 0.618696), + (0.932399, 0.461995, 0.371482), + (0.574457, 0.495326, 1.0), + (0.843548, 0.782616, 0.2), + (0.799677, 0.424, 0.600497), + (0.31184, 0.670528, 0.894208), + (0.96486, 0.624301, 0.294877), + ) +) +_color_data.append( + ( + (0.567426, 0.32317, 0.729831), + (0.969902, 0.60553, 0.0812646), + (0.779595, 0.27424, 0.452303), + (0.40798, 0.445781, 0.850056), + (0.927008, 0.399638, 0.197078), + (0.653277, 0.291071, 0.630502), + (0.0, 0.58, 1.0), + (0.847824, 0.290388, 0.344449), + (0.506477, 0.365003, 0.780268), + (0.953518, 0.526886, 0.125502), + (0.708441, 0.276745, 0.560036), + (0.306099, 0.520521, 0.927123), + (0.890674, 0.309417, 0.274533), + (0.57214, 0.321408, 0.724377), + (0.971358, 0.612517, 0.077334), + ) +) +_color_data.append( + ( + (0.790588, 0.201176, 0.0), + (0.192157, 0.388235, 0.807843), + (1.0, 0.607843, 0.0), + (0.0, 0.596078, 0.109804), + (0.567426, 0.32317, 0.729831), + (0.0, 0.588235, 0.705882), + (0.8505, 0.4275, 0.13185), + (0.499929, 0.285875, 0.775177), + (0.124903, 0.63, 0.471033), + (0.823949, 0.294745, 0.192917), + (0.421264, 0.332242, 0.9), + (0.723992, 0.655444, 0.0), + (0.674637, 0.252, 0.450559), + (0.12582, 0.529344, 0.780984), + (0.860468, 0.477339, 0.106737), + ) +) +_color_data.append( + ( + (0.9, 0.27, 0.0), + (0.97331, 0.616548, 0.0720638), + (0.672892, 0.38748, 0.61777), + (0.873133, 0.420301, 0.0828321), + (0.402478, 0.548513, 0.8), + (0.783249, 0.374, 0.42577), + (0.919858, 0.523239, 0.0718724), + (0.608835, 0.424846, 0.777912), + (0.889944, 0.371757, 0.199627), + (0.990081, 0.700404, 0.026782), + (0.727426, 0.374, 0.511652), + (0.881047, 0.467233, 0.0591929), + (0.520368, 0.477781, 0.799702), + (0.842317, 0.365537, 0.329472), + (0.95828, 0.579307, 0.0811509), + ) +) + + +def get_color_data(i: int) -> np.ndarray: + assert i >= 0 and i < len(_color_data), "i must be between 0 and %d" % len( + _color_data + ) + return _color_data[i] diff --git a/fusion_bench/utils/rich_utils.py b/fusion_bench/utils/rich_utils.py index 316a3295..c8c5c2f5 100644 --- a/fusion_bench/utils/rich_utils.py +++ b/fusion_bench/utils/rich_utils.py @@ -1,3 +1,4 @@ +import logging from pathlib import Path from typing import Sequence @@ -10,6 +11,7 @@ from rich import print from rich.columns import Columns from rich.console import Console +from rich.logging import RichHandler from rich.panel import Panel from rich.prompt import Prompt from rich.syntax import Syntax @@ -184,3 +186,16 @@ def enforce_tags(cfg: DictConfig, save_to_file: bool = False) -> None: print("\nAvailable Styles:") display_available_styles() + + +def setup_colorlogging(force=False, **config_kwargs): + FORMAT = "%(message)s" + + logging.basicConfig( + level=logging.INFO, + format=FORMAT, + datefmt="[%X]", + handlers=[RichHandler()], + force=force, + **config_kwargs, + ) diff --git a/fusion_bench/utils/set.py b/fusion_bench/utils/set.py new file mode 100644 index 00000000..90961fe7 --- /dev/null +++ b/fusion_bench/utils/set.py @@ -0,0 +1,8 @@ +__all__ = ["union"] + + +def union(*iters) -> set: + if len(iters) == 0: + return set() + s = set().union(*iters) + return s diff --git a/fusion_bench/utils/tensorboard.py b/fusion_bench/utils/tensorboard.py new file mode 100644 index 00000000..a2c282ad --- /dev/null +++ b/fusion_bench/utils/tensorboard.py @@ -0,0 +1,51 @@ +""" +functions deal with tensorboard logs. +""" + +from typing import Dict, Iterable, List + +import numpy as np +import pandas as pd +from tensorboard.backend.event_processing import event_accumulator + + +def parse_tensorboard_as_dict(path: str, scalars: Iterable[str]): + """ + returns a dictionary of pandas dataframes for each requested scalar. + + Args: + path(str): A file path to a directory containing tf events files, or a single + tf events file. The accumulator will load events from this path. + scalars: scalars + + Returns: + Dict[str, pandas.DataFrame]: a dictionary of pandas dataframes for each requested scalar + """ + ea = event_accumulator.EventAccumulator( + path, + size_guidance={event_accumulator.SCALARS: 0}, + ) + _absorb_print = ea.Reload() + # make sure the scalars are in the event accumulator tags + assert all( + s in ea.Tags()["scalars"] for s in scalars + ), "some scalars were not found in the event accumulator" + return {k: pd.DataFrame(ea.Scalars(k)) for k in scalars} + + +def parse_tensorboard_as_list(path: str, scalars: Iterable[str]): + """ + returns a list of pandas dataframes for each requested scalar. + + see also: :py:func:`parse_tensorboard_as_dict` + + Args: + path(str): A file path to a directory containing tf events files, or a single + tf events file. The accumulator will load events from this path. + scalars: scalars + + Returns: + List[pandas.DataFrame]: a list of pandas dataframes for each requested scalar. + """ + d = parse_tensorboard_as_dict(path, scalars) + return [d[s] for s in scalars] From 25da77d0dbde531988dddbfa39309bd039014424 Mon Sep 17 00:00:00 2001 From: Anke Tang Date: Thu, 9 Jan 2025 17:55:02 +0800 Subject: [PATCH 4/4] update taskpool --- fusion_bench/taskpool/base_pool.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fusion_bench/taskpool/base_pool.py b/fusion_bench/taskpool/base_pool.py index e7704e3f..df2a3cb1 100644 --- a/fusion_bench/taskpool/base_pool.py +++ b/fusion_bench/taskpool/base_pool.py @@ -7,7 +7,7 @@ class BaseTaskPool(BaseYAMLSerializableModel): _program = None @abstractmethod - def evaluate(self, model): + def evaluate(self, model, *args, **kwargs): """ Evaluate the model on all tasks in the task pool, and return a report.