Skip to content

About

A unified federated learning benchmark for personalization and full-label-space generalization, with 21 baselines and a shared evaluation protocol. FedGRC implementation will be released upon paper acceptance.

Topics

Resources

Stars

16 stars

Watchers

0 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

Repository files navigation

Geometric Representation Consensus for Personalized Federated Learning

Is High Local Accuracy Enough?
Geometric Consensus with Support-Adaptive Statistical Personalization for Federated Learning

Junyu Lin · Bosong Qi · Pengcheng Shi · Jiayuan Li
Wuhan University

✨ Overview · 🚀 Quick Start · 🧩 22 Methods · 💻 Full Commands · 📖 Citation

FedGRC combines geometric representation consensus with support-adaptive statistical personalization for local adaptation and full-label-space generalization.

FedGRC-Benchmark evaluates FedGRC against 21 baselines: 15 complete federated learning methods and 6 statistical classifiers, with the classifiers evaluated on 2 backbones: FedAvg, a foundational FL method, and FedYoYo, a representative novel FL method. It covers 5 heterogeneous settings across 3 datasets—CIFAR-10, CIFAR-100, and FedRS—with label spaces of 10, 15, and 100 classes. CIFAR uses 20 clients with full participation, while FedRS integrates 8 remote-sensing datasets with real-world heterogeneous distributions. For FedRS, we sample 10 of 135 clients per round to simulate realistic heterogeneous and distributed FL scenarios.

The evaluation uses 8 metrics: local personalization (Local), generalization across the full label space (Global), locally unseen-class recognition (Unseen), locally rare-class recognition (Rare), local accuracy among the lowest-performing 25% of clients (L@25), unseen-class accuracy among the lowest-performing 25% of clients (U@25), rare-class accuracy among the lowest-performing 25% of clients (R@25), and the recognition floor among the lowest-performing 25% of clients (F@25). All experiments in the paper use 3 random seeds, with the main comparison results reported as mean ± sample standard deviation.

✨ Overview

Paper Fig. 1: local personalization and global generalization on CIFAR-10 and CIFAR-100 under Dirichlet partitions.

Problem illustration. Under stronger label heterogeneity, higher local accuracy does not necessarily indicate better recognition across the full label space. Local evaluation emphasizes frequent classes and can conceal weaknesses on locally rare or unseen classes.

FedGRC framework: consensus-guided representation learning, multilayer metric synthesis, and support-adaptive shrinkage personalization.

Proposed method overview. FedGRC uses consensus-guided representation learning (CGRL) to align class directions and regulate feature magnitudes across clients. Multilayer metric synthesis constructs a shared covariance metric, while support-adaptive shrinkage personalization (SASP) balances local and shared class means according to local sample counts, supporting local adaptation and recognition across the full label space.

🚀 Quick Start

Use Python 3.11 on Linux x86_64 with an NVIDIA GPU with a CUDA 11.8-compatible driver. From the repository root, install the dependencies:

python -m pip install -r requirements.txt

The FedGRC Quick Start requires the implementation, which will be released upon acceptance. For the current public release, use the baseline commands.

First download and extract the CIFAR-10 partitions. Then run a short FedGRC smoke test:

python main.py --algorithm FedGRC --dataset Cifar10/dir_a03_20c_gtest10 \
  --global_rounds 1 --local_epochs 1 --join_ratio 0.1 --batch_size 64 \
  --cgrl_warmup 1 --eval_gap 2 --goal 261015_quickstart --output_root results

This runs two aggregation steps with two clients per step, then builds MMS and SASP. Outputs are saved under results/c10d03/seed1/FedGRC_261015_quickstart/. For full training, use the FedGRC commands.

📊 Datasets & Evaluation

Setting --dataset Partition Classes Clients Image size
c10d03 Cifar10/dir_a03_20c_gtest10 Dirichlet α = 0.3 10 20 (full) 32 × 32
c10d01 Cifar10/dir_a01_20c_gtest10 Dirichlet α = 0.1 10 20 (full) 32 × 32
c100d03 Cifar100/dir_a03_20c_gtest10 Dirichlet α = 0.3 100 20 (full) 32 × 32
c100d01 Cifar100/dir_a01_20c_gtest10 Dirichlet α = 0.1 100 20 (full) 32 × 32
fedrs FedRS NIID-1 15 135 (dynamic) 64 × 64

full: all clients participate each round. dynamic: 10 of 135 clients are sampled each round.

CIFAR and FedRS-Bench NIID-1 use a 75/25 local train/test split. CIFAR reserves a class-balanced global test set; FedRS uses its supplied global test set.

⚠️ The complete, pre-partitioned datasets in NPZ format are available in Releases. Download and extract the archives, then place the extracted dataset/ folder in the repository root (FedGRC-Benchmark/dataset/) to use them directly.

All client predictors use the complete federation label space. Evaluation reports:

Metric Meaning
Local Sample-weighted accuracy across clients’ local test sets
Global Class-balanced accuracy on the shared global test set, averaged across client predictors
Unseen Accuracy on globally tested classes absent from each client's training data
Rare Accuracy on the shared global test set for each client's two least-supported present classes
L@25 / U@25 / R@25 Mean accuracies of the lowest-performing 25% of clients, ranked separately by local, unseen-class, and rare-class accuracy
F@25 Mean of the lowest 25% of client-level recognition floors, where each floor is the minimum defined local, unseen-class, and rare-class accuracy

🧩 Methods

📌 Paper under review. The current public release includes the complete implementations of all 21 comparison baselines and the evaluation protocol. Upon acceptance, we will release (1) the complete FedGRC implementation and (2) model weights for all methods, enabling direct verification of the paper's main findings and supporting usability and reproducibility.

This repo builds on PFLlib, further adapting its implementations of FedAvg, FedRep, FedROD, and FedLC for this benchmark by addressing implementation issues encountered during integration and refining selected details to better align with the original papers. The remaining baselines (FedTHE, FedETF, FedFA, pFedFDA, FedVLS, FedDr+, BTFL, HPFL, FedYoYo, FedLog, pFedGM, CCVR, FedNCM, Fed3R, FedCGS, FedCOF, and GH-LDA) are reproduced and integrated with reference to their official source code or original papers. All methods, including FedGRC, are evaluated within a unified experimental platform using the same dataset partitions, heterogeneity settings, and evaluation protocol to enable objective, fair, and reproducible comparisons.

🔄 Complete FL Methods

Method Implementation Commands Venue Title Reference Source
FedGRC Upon acceptance Run Ours Is High Local Accuracy Enough? Geometric Consensus with Support-Adaptive Statistical Personalization for Federated Learning -
FedAvg Server · Client Run AISTATS 2017 Communication-Efficient Learning of Deep Networks from Decentralized Data PFLlib
FedRep Server · Client Run ICML 2021 Exploiting Shared Representations for Personalized Federated Learning PFLlib
FedROD Server · Client Run ICLR 2022 On Bridging Generic and Personalized Federated Learning for Image Classification PFLlib
FedLC Server · Client Run ICML 2022 Federated Learning with Label Distribution Skew via Logits Calibration PFLlib
FedTHE Server · Client Run ICLR 2023 Test-Time Robust Personalization for Federated Learning LINs-lab/FedTHE
FedETF Server · Client Run ICCV 2023 No Fear of Classifier Biases: Neural Collapse Inspired Federated Learning with Synthetic and Fixed Classifier ZexiLee/ICCV-2023-FedETF
FedFA Server · Client Run IEEE TMC 2024 FedFA: Federated Learning with Feature Anchors to Align Features and Classifiers for Heterogeneous Data TailinZhou/FedFA
pFedFDA Server · Client Run NeurIPS 2024 Personalized Federated Learning via Feature Distribution Adaptation cj-mclaughlin/pFedFDA
FedVLS Server · Client Run AAAI 2025 Exploring Vacant Classes in Label-Skewed Federated Learning krumpguo/FedVLS
FedDrPlus (FedDr+) Server · Client Run TMLR 2025 FedDr+: Stabilizing Dot-regression with Global Feature Distillation for Federated Learning curisam/FedDr_plus
BTFL Server · Client Run KDD 2025 BTFL: A Bayesian-based Test-Time Generalization Method for Internal and External Data Distributions in Federated learning ZhouYuCS/BTFL
HPFL Server · Client Run ICLR 2025 Hot-pluggable Federated Learning: Bridging General and Personalized FL via Dynamic Selection tmlr-group/HPFL
FedYoYo Server · Client Run ICCV 2025 You Are Your Own Best Teacher: Achieving Centralized-level Performance in Federated Learning under Heterogeneous and Long-tailed Data shanss132/FedYoYo
FedLog Server · Client Run TMLR 2026 FedLog: Personalized Federated Classification with Less Communication and More Flexibility rossyu/fedlog
pFedGM Server · Client Run arXiv 2026 Personalized Federated Learning via Gaussian Generative Modeling Original paper

📐 Statistical Classifiers

These six classifiers can use either a FedAvg or a FedYoYo backbone. Train the corresponding backbone first, then run the classifier command for the same dataset.

Method Implementation Commands Venue Title Reference Source
CCVR Server · Client Run NeurIPS 2021 No Fear of Heterogeneity: Classifier Calibration for Federated Learning with Non-IID Data Original paper
FedNCM Server · Client Run NeurIPS 2023 Guiding The Last Layer in Federated Learning with Pre-Trained Models GwenLegate/GuidingLastLayerFLPretrain
Fed3R Server · Client Run ICML 2024 Accelerating Heterogeneous Federated Learning with Closed-form Classifiers Erosinho13/Fed3R
FedCGS Server · Client Run AAAI 2025 Capture Global Feature Statistics for One-Shot Federated Learning Yuqin-G/FedCGS
FedCOF Server · Client Run NeurIPS 2025 Covariances for Free: Exploiting Mean Distributions for Training-free Federated Learning dipamgoswami/FedCOF
GH-LDA Server · Client Run ICLR 2026 The Gaussian-Head OFL Family: One-Shot Federated Learning from Client Global Statistics FabioTur-dev/One-Shot-FL

💻 Full Commands

The following 140 commands specify all run parameters for the five data settings. Method-specific hyperparameters are selected with reference to the original papers or official implementations to support a fair and representative comparison across datasets. Run them from the repository root.

Full commands use --goal 261015 to label the experiment batch. Outputs are saved under results/<dataset>/seed<seed>/<method>_<goal>/, with the source method prefixed when using a supplied backbone (e.g., FedAvg_HPFL_261015). Use a different goal for each batch to avoid output conflicts; existing run directories are not overwritten. When changing a backbone run’s goal, update the corresponding --backbone_ckpt paths.

FedGRC — 5 configurations

c10d03

python main.py \
  --algorithm FedGRC --dataset Cifar10/dir_a03_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 200 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 5 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --cgrl_lambda_dir 1 --cgrl_lambda_rad 1 --cgrl_beta 1 \
  --cgrl_temperature 0.1 --cgrl_warmup 50 --cgrl_direction_eta 0.5 --cgrl_radial_eta 0.5 \
  --cgrl_eps_r 1e-06 --cgrl_rmin 0.001 --mms_ridge_factor 0.1 --sasp_m0 64 \
  --grc_feature_batch_size 256

c10d01

python main.py \
  --algorithm FedGRC --dataset Cifar10/dir_a01_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 200 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 5 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --cgrl_lambda_dir 1 --cgrl_lambda_rad 1 --cgrl_beta 1 \
  --cgrl_temperature 0.1 --cgrl_warmup 50 --cgrl_direction_eta 0.5 --cgrl_radial_eta 0.5 \
  --cgrl_eps_r 1e-06 --cgrl_rmin 0.001 --mms_ridge_factor 0.1 --sasp_m0 64 \
  --grc_feature_batch_size 256

c100d03

python main.py \
  --algorithm FedGRC --dataset Cifar100/dir_a03_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 300 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 5 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --cgrl_lambda_dir 1 --cgrl_lambda_rad 1 --cgrl_beta 1 \
  --cgrl_temperature 0.1 --cgrl_warmup 50 --cgrl_direction_eta 0.5 --cgrl_radial_eta 0.5 \
  --cgrl_eps_r 1e-06 --cgrl_rmin 0.001 --mms_ridge_factor 0.1 --sasp_m0 64 \
  --grc_feature_batch_size 256

c100d01

python main.py \
  --algorithm FedGRC --dataset Cifar100/dir_a01_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 300 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 5 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --cgrl_lambda_dir 1 --cgrl_lambda_rad 1 --cgrl_beta 1 \
  --cgrl_temperature 0.1 --cgrl_warmup 50 --cgrl_direction_eta 0.5 --cgrl_radial_eta 0.5 \
  --cgrl_eps_r 1e-06 --cgrl_rmin 0.001 --mms_ridge_factor 0.1 --sasp_m0 64 \
  --grc_feature_batch_size 256

fedrs

python main.py \
  --algorithm FedGRC --dataset FedRS --num_classes 15 --num_clients 135 \
  --model ResNet18 --img_size 64 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 500 --eval_gap 100 \
  --join_ratio 0.075 --batch_size 10 --local_learning_rate 0.005 --local_epochs 5 \
  --momentum 0.9 --weight_decay 1e-05 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --cgrl_lambda_dir 1 --cgrl_lambda_rad 1 --cgrl_beta 1 \
  --cgrl_temperature 0.1 --cgrl_warmup 50 --cgrl_direction_eta 0.5 --cgrl_radial_eta 0.5 \
  --cgrl_eps_r 1e-06 --cgrl_rmin 0.001 --mms_ridge_factor 0.1 --sasp_m0 64 \
  --grc_feature_batch_size 256

FedAvg — 5 configurations

c10d03

python main.py \
  --algorithm FedAvg --dataset Cifar10/dir_a03_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 200 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results

c10d01

python main.py \
  --algorithm FedAvg --dataset Cifar10/dir_a01_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 200 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results

c100d03

python main.py \
  --algorithm FedAvg --dataset Cifar100/dir_a03_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 300 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results

c100d01

python main.py \
  --algorithm FedAvg --dataset Cifar100/dir_a01_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 300 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results

fedrs

python main.py \
  --algorithm FedAvg --dataset FedRS --num_classes 15 --num_clients 135 \
  --model ResNet18 --img_size 64 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 500 --eval_gap 100 \
  --join_ratio 0.075 --batch_size 10 --local_learning_rate 0.005 --local_epochs 5 \
  --momentum 0.9 --weight_decay 1e-05 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 10 --data_root dataset \
  --output_root results

FedRep — 5 configurations

c10d03

python main.py \
  --algorithm FedRep --dataset Cifar10/dir_a03_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 200 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --plocal_epochs 5

c10d01

python main.py \
  --algorithm FedRep --dataset Cifar10/dir_a01_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 200 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --plocal_epochs 5

c100d03

python main.py \
  --algorithm FedRep --dataset Cifar100/dir_a03_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 300 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --plocal_epochs 5

c100d01

python main.py \
  --algorithm FedRep --dataset Cifar100/dir_a01_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 300 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --plocal_epochs 5

fedrs

python main.py \
  --algorithm FedRep --dataset FedRS --num_classes 15 --num_clients 135 \
  --model ResNet18 --img_size 64 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 500 --eval_gap 20 \
  --join_ratio 0.075 --batch_size 10 --local_learning_rate 0.005 --local_epochs 5 \
  --momentum 0.9 --weight_decay 1e-05 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --plocal_epochs 5

FedROD — 5 configurations

c10d03

python main.py \
  --algorithm FedROD --dataset Cifar10/dir_a03_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 200 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results

c10d01

python main.py \
  --algorithm FedROD --dataset Cifar10/dir_a01_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 200 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results

c100d03

python main.py \
  --algorithm FedROD --dataset Cifar100/dir_a03_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 300 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results

c100d01

python main.py \
  --algorithm FedROD --dataset Cifar100/dir_a01_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 300 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results

fedrs

python main.py \
  --algorithm FedROD --dataset FedRS --num_classes 15 --num_clients 135 \
  --model ResNet18 --img_size 64 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 500 --eval_gap 20 \
  --join_ratio 0.075 --batch_size 10 --local_learning_rate 0.005 --local_epochs 5 \
  --momentum 0.9 --weight_decay 1e-05 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results

FedLC — 5 configurations

c10d03

python main.py \
  --algorithm FedLC --dataset Cifar10/dir_a03_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 200 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 5 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --tau 6 --lc_missing_cap 10000

c10d01

python main.py \
  --algorithm FedLC --dataset Cifar10/dir_a01_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 200 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 5 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --tau 6 --lc_missing_cap 10000

c100d03

python main.py \
  --algorithm FedLC --dataset Cifar100/dir_a03_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 300 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 5 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --tau 6 --lc_missing_cap 10000

c100d01

python main.py \
  --algorithm FedLC --dataset Cifar100/dir_a01_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 300 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 5 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --tau 6 --lc_missing_cap 10000

fedrs

python main.py \
  --algorithm FedLC --dataset FedRS --num_classes 15 --num_clients 135 \
  --model ResNet18 --img_size 64 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 500 --eval_gap 20 \
  --join_ratio 0.075 --batch_size 10 --local_learning_rate 0.005 --local_epochs 5 \
  --momentum 0.9 --weight_decay 1e-05 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --tau 6 --lc_missing_cap 10000

FedTHE — 5 configurations

c10d03

python main.py \
  --algorithm FedTHE --dataset Cifar10/dir_a03_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 200 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 32 --local_learning_rate 0.01 --local_epochs 5 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --the_steps 20 --the_alpha 0.1 --the_beta 0.3 \
  --the_personal_lr 0.01 --the_personal_epochs 1

c10d01

python main.py \
  --algorithm FedTHE --dataset Cifar10/dir_a01_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 200 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 32 --local_learning_rate 0.01 --local_epochs 5 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --the_steps 20 --the_alpha 0.1 --the_beta 0.3 \
  --the_personal_lr 0.01 --the_personal_epochs 1

c100d03

python main.py \
  --algorithm FedTHE --dataset Cifar100/dir_a03_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 300 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 32 --local_learning_rate 0.01 --local_epochs 5 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --the_steps 20 --the_alpha 0.1 --the_beta 0.3 \
  --the_personal_lr 0.01 --the_personal_epochs 1

c100d01

python main.py \
  --algorithm FedTHE --dataset Cifar100/dir_a01_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 300 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 32 --local_learning_rate 0.01 --local_epochs 5 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --the_steps 20 --the_alpha 0.1 --the_beta 0.3 \
  --the_personal_lr 0.01 --the_personal_epochs 1

fedrs

python main.py \
  --algorithm FedTHE --dataset FedRS --num_classes 15 --num_clients 135 \
  --model ResNet18 --img_size 64 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 500 --eval_gap 20 \
  --join_ratio 0.075 --batch_size 32 --local_learning_rate 0.01 --local_epochs 5 \
  --momentum 0.9 --weight_decay 1e-05 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --the_steps 20 --the_alpha 0.1 --the_beta 0.3 \
  --the_personal_lr 0.01 --the_personal_epochs 1

FedETF — 5 configurations

c10d03

python main.py \
  --algorithm FedETF --dataset Cifar10/dir_a03_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 200 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 128 --local_learning_rate 0.04 --local_epochs 3 \
  --momentum 0.9 --weight_decay 0.0005 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --etf_personalization_rounds 20 --etf_personalization_inner_steps 3 --etf_proto_lr 0.1 \
  --etf_proj_lr 0.05

c10d01

python main.py \
  --algorithm FedETF --dataset Cifar10/dir_a01_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 200 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 128 --local_learning_rate 0.04 --local_epochs 3 \
  --momentum 0.9 --weight_decay 0.0005 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --etf_personalization_rounds 20 --etf_personalization_inner_steps 3 --etf_proto_lr 0.1 \
  --etf_proj_lr 0.05

c100d03

python main.py \
  --algorithm FedETF --dataset Cifar100/dir_a03_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 300 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 128 --local_learning_rate 0.04 --local_epochs 3 \
  --momentum 0.9 --weight_decay 0.0005 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --etf_personalization_rounds 20 --etf_personalization_inner_steps 3 --etf_proto_lr 0.1 \
  --etf_proj_lr 0.05

c100d01

python main.py \
  --algorithm FedETF --dataset Cifar100/dir_a01_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 300 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 128 --local_learning_rate 0.04 --local_epochs 3 \
  --momentum 0.9 --weight_decay 0.0005 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --etf_personalization_rounds 20 --etf_personalization_inner_steps 3 --etf_proto_lr 0.1 \
  --etf_proj_lr 0.05

fedrs

python main.py \
  --algorithm FedETF --dataset FedRS --num_classes 15 --num_clients 135 \
  --model ResNet18 --img_size 64 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 500 --eval_gap 20 \
  --join_ratio 0.075 --batch_size 128 --local_learning_rate 0.04 --local_epochs 5 \
  --momentum 0.9 --weight_decay 0.0005 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --etf_personalization_rounds 20 --etf_personalization_inner_steps 3 --etf_proto_lr 0.1 \
  --etf_proj_lr 0.05

FedFA — 5 configurations

c10d03

python main.py \
  --algorithm FedFA --dataset Cifar10/dir_a03_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 200 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 64 --local_learning_rate 0.01 --local_epochs 5 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --fedfa_mu 0.1 --fedfa_anchor_momentum 0.5 --fedfa_calibration_lr 0.001

c10d01

python main.py \
  --algorithm FedFA --dataset Cifar10/dir_a01_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 200 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 64 --local_learning_rate 0.01 --local_epochs 5 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --fedfa_mu 0.1 --fedfa_anchor_momentum 0.5 --fedfa_calibration_lr 0.001

c100d03

python main.py \
  --algorithm FedFA --dataset Cifar100/dir_a03_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 300 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 64 --local_learning_rate 0.01 --local_epochs 5 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --fedfa_mu 0.1 --fedfa_anchor_momentum 0.5 --fedfa_calibration_lr 0.001

c100d01

python main.py \
  --algorithm FedFA --dataset Cifar100/dir_a01_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 300 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 64 --local_learning_rate 0.01 --local_epochs 5 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --fedfa_mu 0.1 --fedfa_anchor_momentum 0.5 --fedfa_calibration_lr 0.001

fedrs

python main.py \
  --algorithm FedFA --dataset FedRS --num_classes 15 --num_clients 135 \
  --model ResNet18 --img_size 64 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 500 --eval_gap 100 \
  --join_ratio 0.075 --batch_size 64 --local_learning_rate 0.01 --local_epochs 5 \
  --momentum 0.9 --weight_decay 1e-05 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 10 --data_root dataset \
  --output_root results --fedfa_mu 0.1 --fedfa_anchor_momentum 0.5 --fedfa_calibration_lr 0.001

pFedFDA — 5 configurations

c10d03

python main.py \
  --algorithm pFedFDA --dataset Cifar10/dir_a03_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 200 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 50 --local_learning_rate 0.01 --local_epochs 5 \
  --momentum 0.5 --weight_decay 0.0005 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --single_beta 1 --local_beta false

c10d01

python main.py \
  --algorithm pFedFDA --dataset Cifar10/dir_a01_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 200 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 50 --local_learning_rate 0.01 --local_epochs 5 \
  --momentum 0.5 --weight_decay 0.0005 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --single_beta 1 --local_beta false

c100d03

python main.py \
  --algorithm pFedFDA --dataset Cifar100/dir_a03_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 300 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 50 --local_learning_rate 0.01 --local_epochs 5 \
  --momentum 0.5 --weight_decay 0.0005 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --single_beta 1 --local_beta false

c100d01

python main.py \
  --algorithm pFedFDA --dataset Cifar100/dir_a01_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 300 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 50 --local_learning_rate 0.01 --local_epochs 5 \
  --momentum 0.5 --weight_decay 0.0005 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --single_beta 1 --local_beta false

fedrs

python main.py \
  --algorithm pFedFDA --dataset FedRS --num_classes 15 --num_clients 135 \
  --model ResNet18 --img_size 64 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 500 --eval_gap 20 \
  --join_ratio 0.075 --batch_size 50 --local_learning_rate 0.01 --local_epochs 5 \
  --momentum 0.9 --weight_decay 1e-05 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --single_beta 1 --local_beta false

FedVLS — 5 configurations

c10d03

python main.py \
  --algorithm FedVLS --dataset Cifar10/dir_a03_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 200 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 64 --local_learning_rate 0.01 --local_epochs 10 \
  --momentum 0.9 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --lamda 0.1

c10d01

python main.py \
  --algorithm FedVLS --dataset Cifar10/dir_a01_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 200 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 64 --local_learning_rate 0.01 --local_epochs 10 \
  --momentum 0.9 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --lamda 0.1

c100d03

python main.py \
  --algorithm FedVLS --dataset Cifar100/dir_a03_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 300 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 64 --local_learning_rate 0.01 --local_epochs 10 \
  --momentum 0.9 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --lamda 0.1

c100d01

python main.py \
  --algorithm FedVLS --dataset Cifar100/dir_a01_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 300 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 64 --local_learning_rate 0.01 --local_epochs 10 \
  --momentum 0.9 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --lamda 0.1

fedrs

python main.py \
  --algorithm FedVLS --dataset FedRS --num_classes 15 --num_clients 135 \
  --model ResNet18 --img_size 64 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 500 --eval_gap 20 \
  --join_ratio 0.075 --batch_size 64 --local_learning_rate 0.01 --local_epochs 5 \
  --momentum 0.9 --weight_decay 1e-05 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --lamda 0.1

FedDrPlus — 5 configurations

c10d03

python main.py \
  --algorithm FedDrPlus --dataset Cifar10/dir_a03_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 200 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.175 --local_epochs 5 \
  --momentum 0.9 --weight_decay 1e-05 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --drp_beta 0.9

c10d01

python main.py \
  --algorithm FedDrPlus --dataset Cifar10/dir_a01_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 200 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.175 --local_epochs 5 \
  --momentum 0.9 --weight_decay 1e-05 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --drp_beta 0.9

c100d03

python main.py \
  --algorithm FedDrPlus --dataset Cifar100/dir_a03_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 300 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.25 --local_epochs 5 \
  --momentum 0.9 --weight_decay 1e-05 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --drp_beta 0.9

c100d01

python main.py \
  --algorithm FedDrPlus --dataset Cifar100/dir_a01_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 300 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.25 --local_epochs 5 \
  --momentum 0.9 --weight_decay 1e-05 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --drp_beta 0.9

fedrs

python main.py \
  --algorithm FedDrPlus --dataset FedRS --num_classes 15 --num_clients 135 \
  --model ResNet18 --img_size 64 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 500 --eval_gap 20 \
  --join_ratio 0.075 --batch_size 10 --local_learning_rate 0.175 --local_epochs 5 \
  --momentum 0.9 --weight_decay 1e-05 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --drp_beta 0.9

BTFL — 5 configurations

c10d03

python main.py \
  --algorithm BTFL --dataset Cifar10/dir_a03_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 200 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 5 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --btfl_q_level 2 --btfl_kb 4 --btfl_sigma 0 \
  --btfl_update_condition 16 --btfl_personal_lr 0.01 --btfl_personal_epochs 1 --btfl_ent_norm 4.605170185988092

c10d01

python main.py \
  --algorithm BTFL --dataset Cifar10/dir_a01_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 200 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 5 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --btfl_q_level 2 --btfl_kb 4 --btfl_sigma 0 \
  --btfl_update_condition 16 --btfl_personal_lr 0.01 --btfl_personal_epochs 1 --btfl_ent_norm 4.605170185988092

c100d03

python main.py \
  --algorithm BTFL --dataset Cifar100/dir_a03_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 300 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 5 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --btfl_q_level 2 --btfl_kb 4 --btfl_sigma 0 \
  --btfl_update_condition 16 --btfl_personal_lr 0.01 --btfl_personal_epochs 1 --btfl_ent_norm 4.605170185988092

c100d01

python main.py \
  --algorithm BTFL --dataset Cifar100/dir_a01_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 300 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 5 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --btfl_q_level 2 --btfl_kb 4 --btfl_sigma 0 \
  --btfl_update_condition 16 --btfl_personal_lr 0.01 --btfl_personal_epochs 1 --btfl_ent_norm 4.605170185988092

fedrs

python main.py \
  --algorithm BTFL --dataset FedRS --num_classes 15 --num_clients 135 \
  --model ResNet18 --img_size 64 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 500 --eval_gap 20 \
  --join_ratio 0.075 --batch_size 10 --local_learning_rate 0.005 --local_epochs 5 \
  --momentum 0.9 --weight_decay 1e-05 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --btfl_q_level 2 --btfl_kb 4 --btfl_sigma 0 \
  --btfl_update_condition 16 --btfl_personal_lr 0.01 --btfl_personal_epochs 1 --btfl_ent_norm 4.605170185988092

HPFL — 5 configurations · FedAvg backbone

c10d03

python main.py \
  --algorithm HPFL --dataset Cifar10/dir_a03_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 10 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c10d03/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt --hpfl_backbone_source FedAvg --hpfl_head_epochs 10 \
  --hpfl_head_lr 0.1 --hpfl_head_batch_size 128 --hpfl_head_momentum 0 --hpfl_head_weight_decay 0.0001 \
  --hpfl_feature_batch_size 10 --hpfl_query_batch_size 128 --hpfl_marker_limit 0 \
  --hpfl_noise_coef 0 --hpfl_mmd_block_size 512

c10d01

python main.py \
  --algorithm HPFL --dataset Cifar10/dir_a01_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 10 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c10d01/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt --hpfl_backbone_source FedAvg --hpfl_head_epochs 10 \
  --hpfl_head_lr 0.1 --hpfl_head_batch_size 128 --hpfl_head_momentum 0 --hpfl_head_weight_decay 0.0001 \
  --hpfl_feature_batch_size 10 --hpfl_query_batch_size 128 --hpfl_marker_limit 0 \
  --hpfl_noise_coef 0 --hpfl_mmd_block_size 512

c100d03

python main.py \
  --algorithm HPFL --dataset Cifar100/dir_a03_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 10 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c100d03/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt --hpfl_backbone_source FedAvg --hpfl_head_epochs 10 \
  --hpfl_head_lr 0.1 --hpfl_head_batch_size 128 --hpfl_head_momentum 0 --hpfl_head_weight_decay 0.0001 \
  --hpfl_feature_batch_size 10 --hpfl_query_batch_size 128 --hpfl_marker_limit 0 \
  --hpfl_noise_coef 0 --hpfl_mmd_block_size 512

c100d01

python main.py \
  --algorithm HPFL --dataset Cifar100/dir_a01_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 10 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c100d01/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt --hpfl_backbone_source FedAvg --hpfl_head_epochs 10 \
  --hpfl_head_lr 0.1 --hpfl_head_batch_size 128 --hpfl_head_momentum 0 --hpfl_head_weight_decay 0.0001 \
  --hpfl_feature_batch_size 10 --hpfl_query_batch_size 128 --hpfl_marker_limit 0 \
  --hpfl_noise_coef 0 --hpfl_mmd_block_size 512

fedrs

python main.py \
  --algorithm HPFL --dataset FedRS --num_classes 15 --num_clients 135 \
  --model ResNet18 --img_size 64 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 20 \
  --join_ratio 0.075 --batch_size 10 --local_learning_rate 0.005 --local_epochs 10 \
  --momentum 0.9 --weight_decay 1e-05 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/fedrs/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt --hpfl_backbone_source FedAvg --hpfl_head_epochs 10 \
  --hpfl_head_lr 0.1 --hpfl_head_batch_size 128 --hpfl_head_momentum 0 --hpfl_head_weight_decay 0.0001 \
  --hpfl_feature_batch_size 10 --hpfl_query_batch_size 128 --hpfl_marker_limit 0 \
  --hpfl_noise_coef 0 --hpfl_mmd_block_size 512

FedYoYo — 5 configurations

c10d03

python main.py \
  --algorithm FedYoYo --dataset Cifar10/dir_a03_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 200 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 5 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --yoyo_warmup 50 --yoyo_gamma 0.1 --yoyo_tau 1.5 \
  --yoyo_kd_weight 4 --yoyo_kd_temp 1.5 --asd_aug trivial

c10d01

python main.py \
  --algorithm FedYoYo --dataset Cifar10/dir_a01_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 200 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 5 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --yoyo_warmup 50 --yoyo_gamma 0.1 --yoyo_tau 1.5 \
  --yoyo_kd_weight 4 --yoyo_kd_temp 1.5 --asd_aug trivial

c100d03

python main.py \
  --algorithm FedYoYo --dataset Cifar100/dir_a03_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 300 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 5 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --yoyo_warmup 50 --yoyo_gamma 0.1 --yoyo_tau 1.5 \
  --yoyo_kd_weight 4 --yoyo_kd_temp 1.5 --asd_aug trivial

c100d01

python main.py \
  --algorithm FedYoYo --dataset Cifar100/dir_a01_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 300 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 5 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --yoyo_warmup 50 --yoyo_gamma 0.1 --yoyo_tau 1.5 \
  --yoyo_kd_weight 4 --yoyo_kd_temp 1.5 --asd_aug trivial

fedrs

python main.py \
  --algorithm FedYoYo --dataset FedRS --num_classes 15 --num_clients 135 \
  --model ResNet18 --img_size 64 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 500 --eval_gap 100 \
  --join_ratio 0.075 --batch_size 10 --local_learning_rate 0.005 --local_epochs 5 \
  --momentum 0.9 --weight_decay 1e-05 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 10 --data_root dataset \
  --output_root results --yoyo_warmup 125 --yoyo_gamma 0.1 --yoyo_tau 1.5 \
  --yoyo_kd_weight 4 --yoyo_kd_temp 1.5 --asd_aug trivial

FedLog — 5 configurations

c10d03

python main.py \
  --algorithm FedLog --dataset Cifar10/dir_a03_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 200 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 5 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --flog_lr 0.0005 --flog_map_iters 50000 --flog_map_lr 0.01 \
  --flog_map_tol 0.001 --flog_stat_batch_size 100

c10d01

python main.py \
  --algorithm FedLog --dataset Cifar10/dir_a01_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 200 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 5 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --flog_lr 0.0005 --flog_map_iters 50000 --flog_map_lr 0.01 \
  --flog_map_tol 0.001 --flog_stat_batch_size 100

c100d03

python main.py \
  --algorithm FedLog --dataset Cifar100/dir_a03_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 300 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 5 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --flog_lr 0.0005 --flog_map_iters 50000 --flog_map_lr 0.01 \
  --flog_map_tol 0.001 --flog_stat_batch_size 100

c100d01

python main.py \
  --algorithm FedLog --dataset Cifar100/dir_a01_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 300 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 5 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --flog_lr 0.0005 --flog_map_iters 50000 --flog_map_lr 0.01 \
  --flog_map_tol 0.001 --flog_stat_batch_size 100

fedrs

python main.py \
  --algorithm FedLog --dataset FedRS --num_classes 15 --num_clients 135 \
  --model ResNet18 --img_size 64 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 500 --eval_gap 20 \
  --join_ratio 0.075 --batch_size 10 --local_learning_rate 0.005 --local_epochs 5 \
  --momentum 0.9 --weight_decay 1e-05 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --flog_lr 0.0005 --flog_map_iters 50000 --flog_map_lr 0.01 \
  --flog_map_tol 0.001 --flog_stat_batch_size 100

pFedGM — 5 configurations

c10d03

python main.py \
  --algorithm pFedGM --dataset Cifar10/dir_a03_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 200 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 50 --local_learning_rate 0.01 --local_epochs 5 \
  --momentum 0.5 --weight_decay 0.0005 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --pfedgm_lambda 1 --pfedgm_cov_mode grad --pfedgm_absent_proto drop \
  --pfedgm_proto_ema 0.9 --pfedgm_aug 0 --pfedgm_local_epochs 5 --pfedgm_p_lr 0.05 \
  --pfedgm_lbfgs_iter 10 --pfedgm_lbfgs_rounds 5 --pfedgm_lbfgs_lr 0.05

c10d01

python main.py \
  --algorithm pFedGM --dataset Cifar10/dir_a01_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 200 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 50 --local_learning_rate 0.01 --local_epochs 5 \
  --momentum 0.5 --weight_decay 0.0005 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --pfedgm_lambda 1 --pfedgm_cov_mode grad --pfedgm_absent_proto drop \
  --pfedgm_proto_ema 0.9 --pfedgm_aug 0 --pfedgm_local_epochs 5 --pfedgm_p_lr 0.05 \
  --pfedgm_lbfgs_iter 10 --pfedgm_lbfgs_rounds 5 --pfedgm_lbfgs_lr 0.05

c100d03

python main.py \
  --algorithm pFedGM --dataset Cifar100/dir_a03_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 300 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 50 --local_learning_rate 0.01 --local_epochs 5 \
  --momentum 0.5 --weight_decay 0.0005 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --pfedgm_lambda 1 --pfedgm_cov_mode grad --pfedgm_absent_proto drop \
  --pfedgm_proto_ema 0.9 --pfedgm_aug 0 --pfedgm_local_epochs 5 --pfedgm_p_lr 0.05 \
  --pfedgm_lbfgs_iter 10 --pfedgm_lbfgs_rounds 5 --pfedgm_lbfgs_lr 0.05

c100d01

python main.py \
  --algorithm pFedGM --dataset Cifar100/dir_a01_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 300 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 50 --local_learning_rate 0.01 --local_epochs 5 \
  --momentum 0.5 --weight_decay 0.0005 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --pfedgm_lambda 1 --pfedgm_cov_mode grad --pfedgm_absent_proto drop \
  --pfedgm_proto_ema 0.9 --pfedgm_aug 0 --pfedgm_local_epochs 5 --pfedgm_p_lr 0.05 \
  --pfedgm_lbfgs_iter 10 --pfedgm_lbfgs_rounds 5 --pfedgm_lbfgs_lr 0.05

fedrs

python main.py \
  --algorithm pFedGM --dataset FedRS --num_classes 15 --num_clients 135 \
  --model ResNet18 --img_size 64 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 500 --eval_gap 20 \
  --join_ratio 0.075 --batch_size 50 --local_learning_rate 0.01 --local_epochs 5 \
  --momentum 0.9 --weight_decay 1e-05 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --pfedgm_lambda 1 --pfedgm_cov_mode grad --pfedgm_absent_proto drop \
  --pfedgm_proto_ema 0.9 --pfedgm_aug 0 --pfedgm_local_epochs 5 --pfedgm_p_lr 0.05 \
  --pfedgm_lbfgs_iter 10 --pfedgm_lbfgs_rounds 5 --pfedgm_lbfgs_lr 0.05

CCVR — 10 configurations · FedAvg and FedYoYo backbones

Backbone: FedAvg

c10d03

python main.py \
  --algorithm CCVR --dataset Cifar10/dir_a03_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c10d03/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt --ccvr_per 200

c10d01

python main.py \
  --algorithm CCVR --dataset Cifar10/dir_a01_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c10d01/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt --ccvr_per 200

c100d03

python main.py \
  --algorithm CCVR --dataset Cifar100/dir_a03_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c100d03/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt --ccvr_per 200

c100d01

python main.py \
  --algorithm CCVR --dataset Cifar100/dir_a01_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c100d01/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt --ccvr_per 200

fedrs

python main.py \
  --algorithm CCVR --dataset FedRS --num_classes 15 --num_clients 135 \
  --model ResNet18 --img_size 64 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 20 \
  --join_ratio 0.075 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.9 --weight_decay 1e-05 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/fedrs/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt --ccvr_per 200

Backbone: FedYoYo

c10d03

python main.py \
  --algorithm CCVR --dataset Cifar10/dir_a03_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c10d03/seed1/FedYoYo_261015/FedYoYo_261015_seed1_terminal.pt --ccvr_per 200

c10d01

python main.py \
  --algorithm CCVR --dataset Cifar10/dir_a01_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c10d01/seed1/FedYoYo_261015/FedYoYo_261015_seed1_terminal.pt --ccvr_per 200

c100d03

python main.py \
  --algorithm CCVR --dataset Cifar100/dir_a03_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c100d03/seed1/FedYoYo_261015/FedYoYo_261015_seed1_terminal.pt --ccvr_per 200

c100d01

python main.py \
  --algorithm CCVR --dataset Cifar100/dir_a01_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c100d01/seed1/FedYoYo_261015/FedYoYo_261015_seed1_terminal.pt --ccvr_per 200

fedrs

python main.py \
  --algorithm CCVR --dataset FedRS --num_classes 15 --num_clients 135 \
  --model ResNet18 --img_size 64 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 20 \
  --join_ratio 0.075 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.9 --weight_decay 1e-05 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/fedrs/seed1/FedYoYo_261015/FedYoYo_261015_seed1_terminal.pt --ccvr_per 200

FedNCM — 10 configurations · FedAvg and FedYoYo backbones

Backbone: FedAvg

c10d03

python main.py \
  --algorithm FedNCM --dataset Cifar10/dir_a03_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c10d03/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt

c10d01

python main.py \
  --algorithm FedNCM --dataset Cifar10/dir_a01_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c10d01/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt

c100d03

python main.py \
  --algorithm FedNCM --dataset Cifar100/dir_a03_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c100d03/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt

c100d01

python main.py \
  --algorithm FedNCM --dataset Cifar100/dir_a01_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c100d01/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt

fedrs

python main.py \
  --algorithm FedNCM --dataset FedRS --num_classes 15 --num_clients 135 \
  --model ResNet18 --img_size 64 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 20 \
  --join_ratio 0.075 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.9 --weight_decay 1e-05 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/fedrs/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt

Backbone: FedYoYo

c10d03

python main.py \
  --algorithm FedNCM --dataset Cifar10/dir_a03_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c10d03/seed1/FedYoYo_261015/FedYoYo_261015_seed1_terminal.pt

c10d01

python main.py \
  --algorithm FedNCM --dataset Cifar10/dir_a01_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c10d01/seed1/FedYoYo_261015/FedYoYo_261015_seed1_terminal.pt

c100d03

python main.py \
  --algorithm FedNCM --dataset Cifar100/dir_a03_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c100d03/seed1/FedYoYo_261015/FedYoYo_261015_seed1_terminal.pt

c100d01

python main.py \
  --algorithm FedNCM --dataset Cifar100/dir_a01_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c100d01/seed1/FedYoYo_261015/FedYoYo_261015_seed1_terminal.pt

fedrs

python main.py \
  --algorithm FedNCM --dataset FedRS --num_classes 15 --num_clients 135 \
  --model ResNet18 --img_size 64 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 20 \
  --join_ratio 0.075 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.9 --weight_decay 1e-05 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/fedrs/seed1/FedYoYo_261015/FedYoYo_261015_seed1_terminal.pt

Fed3R — 10 configurations · FedAvg and FedYoYo backbones

Backbone: FedAvg

c10d03

python main.py \
  --algorithm Fed3R --dataset Cifar10/dir_a03_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c10d03/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt --f3r_lambda 0.01

c10d01

python main.py \
  --algorithm Fed3R --dataset Cifar10/dir_a01_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c10d01/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt --f3r_lambda 0.01

c100d03

python main.py \
  --algorithm Fed3R --dataset Cifar100/dir_a03_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c100d03/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt --f3r_lambda 0.01

c100d01

python main.py \
  --algorithm Fed3R --dataset Cifar100/dir_a01_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c100d01/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt --f3r_lambda 0.01

fedrs

python main.py \
  --algorithm Fed3R --dataset FedRS --num_classes 15 --num_clients 135 \
  --model ResNet18 --img_size 64 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 20 \
  --join_ratio 0.075 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.9 --weight_decay 1e-05 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/fedrs/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt --f3r_lambda 0.01

Backbone: FedYoYo

c10d03

python main.py \
  --algorithm Fed3R --dataset Cifar10/dir_a03_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c10d03/seed1/FedYoYo_261015/FedYoYo_261015_seed1_terminal.pt --f3r_lambda 0.01

c10d01

python main.py \
  --algorithm Fed3R --dataset Cifar10/dir_a01_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c10d01/seed1/FedYoYo_261015/FedYoYo_261015_seed1_terminal.pt --f3r_lambda 0.01

c100d03

python main.py \
  --algorithm Fed3R --dataset Cifar100/dir_a03_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c100d03/seed1/FedYoYo_261015/FedYoYo_261015_seed1_terminal.pt --f3r_lambda 0.01

c100d01

python main.py \
  --algorithm Fed3R --dataset Cifar100/dir_a01_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c100d01/seed1/FedYoYo_261015/FedYoYo_261015_seed1_terminal.pt --f3r_lambda 0.01

fedrs

python main.py \
  --algorithm Fed3R --dataset FedRS --num_classes 15 --num_clients 135 \
  --model ResNet18 --img_size 64 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 20 \
  --join_ratio 0.075 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.9 --weight_decay 1e-05 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/fedrs/seed1/FedYoYo_261015/FedYoYo_261015_seed1_terminal.pt --f3r_lambda 0.01

FedCGS — 10 configurations · FedAvg and FedYoYo backbones

Backbone: FedAvg

c10d03

python main.py \
  --algorithm FedCGS --dataset Cifar10/dir_a03_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c10d03/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt --cgs_variant exactnorm

c10d01

python main.py \
  --algorithm FedCGS --dataset Cifar10/dir_a01_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c10d01/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt --cgs_variant exactnorm

c100d03

python main.py \
  --algorithm FedCGS --dataset Cifar100/dir_a03_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c100d03/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt --cgs_variant exactnorm

c100d01

python main.py \
  --algorithm FedCGS --dataset Cifar100/dir_a01_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c100d01/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt --cgs_variant exactnorm

fedrs

python main.py \
  --algorithm FedCGS --dataset FedRS --num_classes 15 --num_clients 135 \
  --model ResNet18 --img_size 64 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 20 \
  --join_ratio 0.075 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.9 --weight_decay 1e-05 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/fedrs/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt --cgs_variant exactnorm

Backbone: FedYoYo

c10d03

python main.py \
  --algorithm FedCGS --dataset Cifar10/dir_a03_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c10d03/seed1/FedYoYo_261015/FedYoYo_261015_seed1_terminal.pt --cgs_variant exactnorm

c10d01

python main.py \
  --algorithm FedCGS --dataset Cifar10/dir_a01_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c10d01/seed1/FedYoYo_261015/FedYoYo_261015_seed1_terminal.pt --cgs_variant exactnorm

c100d03

python main.py \
  --algorithm FedCGS --dataset Cifar100/dir_a03_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c100d03/seed1/FedYoYo_261015/FedYoYo_261015_seed1_terminal.pt --cgs_variant exactnorm

c100d01

python main.py \
  --algorithm FedCGS --dataset Cifar100/dir_a01_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c100d01/seed1/FedYoYo_261015/FedYoYo_261015_seed1_terminal.pt --cgs_variant exactnorm

fedrs

python main.py \
  --algorithm FedCGS --dataset FedRS --num_classes 15 --num_clients 135 \
  --model ResNet18 --img_size 64 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 20 \
  --join_ratio 0.075 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.9 --weight_decay 1e-05 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/fedrs/seed1/FedYoYo_261015/FedYoYo_261015_seed1_terminal.pt --cgs_variant exactnorm

FedCOF — 10 configurations · FedAvg and FedYoYo backbones

Backbone: FedAvg

c10d03

python main.py \
  --algorithm FedCOF --dataset Cifar10/dir_a03_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c10d03/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt --fcof_gamma 1

c10d01

python main.py \
  --algorithm FedCOF --dataset Cifar10/dir_a01_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c10d01/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt --fcof_gamma 1

c100d03

python main.py \
  --algorithm FedCOF --dataset Cifar100/dir_a03_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c100d03/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt --fcof_gamma 1

c100d01

python main.py \
  --algorithm FedCOF --dataset Cifar100/dir_a01_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c100d01/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt --fcof_gamma 1

fedrs

python main.py \
  --algorithm FedCOF --dataset FedRS --num_classes 15 --num_clients 135 \
  --model ResNet18 --img_size 64 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 20 \
  --join_ratio 0.075 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.9 --weight_decay 1e-05 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/fedrs/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt --fcof_gamma 1

Backbone: FedYoYo

c10d03

python main.py \
  --algorithm FedCOF --dataset Cifar10/dir_a03_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c10d03/seed1/FedYoYo_261015/FedYoYo_261015_seed1_terminal.pt --fcof_gamma 1

c10d01

python main.py \
  --algorithm FedCOF --dataset Cifar10/dir_a01_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c10d01/seed1/FedYoYo_261015/FedYoYo_261015_seed1_terminal.pt --fcof_gamma 1

c100d03

python main.py \
  --algorithm FedCOF --dataset Cifar100/dir_a03_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c100d03/seed1/FedYoYo_261015/FedYoYo_261015_seed1_terminal.pt --fcof_gamma 1

c100d01

python main.py \
  --algorithm FedCOF --dataset Cifar100/dir_a01_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c100d01/seed1/FedYoYo_261015/FedYoYo_261015_seed1_terminal.pt --fcof_gamma 1

fedrs

python main.py \
  --algorithm FedCOF --dataset FedRS --num_classes 15 --num_clients 135 \
  --model ResNet18 --img_size 64 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 20 \
  --join_ratio 0.075 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.9 --weight_decay 1e-05 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/fedrs/seed1/FedYoYo_261015/FedYoYo_261015_seed1_terminal.pt --fcof_gamma 1

GH-LDA — 10 configurations · FedAvg and FedYoYo backbones

Backbone: FedAvg

c10d03

python main.py \
  --algorithm GHLDA --dataset Cifar10/dir_a03_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c10d03/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt --ghlda_lda_shrink 0.05

c10d01

python main.py \
  --algorithm GHLDA --dataset Cifar10/dir_a01_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c10d01/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt --ghlda_lda_shrink 0.05

c100d03

python main.py \
  --algorithm GHLDA --dataset Cifar100/dir_a03_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c100d03/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt --ghlda_lda_shrink 0.05

c100d01

python main.py \
  --algorithm GHLDA --dataset Cifar100/dir_a01_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c100d01/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt --ghlda_lda_shrink 0.05

fedrs

python main.py \
  --algorithm GHLDA --dataset FedRS --num_classes 15 --num_clients 135 \
  --model ResNet18 --img_size 64 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 20 \
  --join_ratio 0.075 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.9 --weight_decay 1e-05 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/fedrs/seed1/FedAvg_261015/FedAvg_261015_seed1_terminal.pt --ghlda_lda_shrink 0.05

Backbone: FedYoYo

c10d03

python main.py \
  --algorithm GHLDA --dataset Cifar10/dir_a03_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c10d03/seed1/FedYoYo_261015/FedYoYo_261015_seed1_terminal.pt --ghlda_lda_shrink 0.05

c10d01

python main.py \
  --algorithm GHLDA --dataset Cifar10/dir_a01_20c_gtest10 --num_classes 10 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 5 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c10d01/seed1/FedYoYo_261015/FedYoYo_261015_seed1_terminal.pt --ghlda_lda_shrink 0.05

c100d03

python main.py \
  --algorithm GHLDA --dataset Cifar100/dir_a03_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c100d03/seed1/FedYoYo_261015/FedYoYo_261015_seed1_terminal.pt --ghlda_lda_shrink 0.05

c100d01

python main.py \
  --algorithm GHLDA --dataset Cifar100/dir_a01_20c_gtest10 --num_classes 100 --num_clients 20 \
  --model ResNet18 --img_size 32 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 6 \
  --join_ratio 1.0 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.0 --weight_decay 0.0 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/c100d01/seed1/FedYoYo_261015/FedYoYo_261015_seed1_terminal.pt --ghlda_lda_shrink 0.05

fedrs

python main.py \
  --algorithm GHLDA --dataset FedRS --num_classes 15 --num_clients 135 \
  --model ResNet18 --img_size 64 --device cuda --device_id 0 \
  --goal 261015 --global_rounds 0 --eval_gap 20 \
  --join_ratio 0.075 --batch_size 10 --local_learning_rate 0.005 --local_epochs 1 \
  --momentum 0.9 --weight_decay 1e-05 --learning_rate_decay false --learning_rate_decay_gamma 0.99 \
  --rare_class_k 2 --ckpt_every 0 --data_root dataset \
  --output_root results --backbone_ckpt results/fedrs/seed1/FedYoYo_261015/FedYoYo_261015_seed1_terminal.pt --ghlda_lda_shrink 0.05

📦 Outputs

Each run saves its configuration, final metrics and evaluation records alongside the model files. Checkpoint names use <method>_<goal>_seed<seed> or <backbone-method>_<head-method>_<goal>_seed<seed> as their prefix:

File Contents
config.json Run configuration
metrics.json Final metrics, stored as fractions
data/summary.h5 / data/detail.h5 Evaluation curves and client/class-level records
*_terminal.pt Model at the end of training
*_deployment.pt Inference checkpoints saved by FedGRC and HPFL
checkpoints/round_XXX.pt Intermediate models when --ckpt_every is enabled

For FedGRC, terminal.pt contains the trained backbone and auxiliary classifier; deployment.pt additionally contains MMS scales and SASP heads. Its final metrics evaluate the MMS/SASP predictor. HPFL saves a deployment checkpoint; statistical classifiers save their fitted model as a terminal checkpoint.

🔎 FedGRC inference

images is a normalized tensor of shape [N, 3, H, W]; client_id selects the personalized head.

from flcore.clients.clientgrc import FedGRCPredictor

predictor = FedGRCPredictor.load(
    "results/c10d03/seed1/FedGRC_261015/FedGRC_261015_seed1_deployment.pt",
    device="cuda",
)
predictions = predictor.predict(images, client_id=0, batch_size=256)

📖 Citation

If you find FedGRC or this benchmark helpful, please consider citing our work:

@article{Lin2026FedGRC,
  author  = {Junyu Lin and Bosong Qi and Pengcheng Shi and Jiayuan Li},
  title   = {Is High Local Accuracy Enough? Geometric Consensus with Support-Adaptive Statistical Personalization for Federated Learning},
  journal = {arXiv preprint arXiv:2610.31133},
  year    = {2026},
}

📬 Contact

If you have any questions, please open an issue in this repository or contact jonathanlin1206@whu.edu.cn.

🤝 Acknowledgements

🏆 We thank the PFLlib team and the authors who shared the reference implementations listed above.

🏆 We also thank the FedRS-Bench team for integrating and providing multi-source remote sensing datasets with real-world heterogeneous distributions for federated learning.

⚖️ License

See LICENSE and third-party notices for licensing information.

📂 Repository Structure

FedGRC-Benchmark/
├── README.md
├── requirements.txt
├── LICENSE
├── LICENSES/          # Third-party licenses and attribution
├── main.py           # Run any of the 22 methods
├── dataset/          # CIFAR-10, CIFAR-100, and FedRS NPZ files extracted from Releases
├── flcore/
│   ├── clients/      # Client implementations
│   │   ├── clientbase.py
│   │   ├── clientavg.py
│   │   └── ...
│   ├── servers/      # Server implementations
│   │   ├── serverbase.py
│   │   ├── serveravg.py
│   │   └── ...
│   ├── heads/        # Statistical classifiers and feature extraction
│   │   ├── extract_features.py
│   │   └── statistical_heads.py
│   └── trainmodel/   # Model and head definitions
│       ├── models.py
│       └── ...
└── utils/            # Data loading, metrics, augmentation and output helpers

About

A unified federated learning benchmark for personalization and full-label-space generalization, with 21 baselines and a shared evaluation protocol. FedGRC implementation will be released upon paper acceptance.

Topics

Resources

Stars

16 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages