资讯动态

Flower 中的 FedVSSL 基线:面向视频理解的联邦自监督预训练与下游微调全流程指南

发布时间:2026/9/17 1:53:48 来源:尧图企业网站定制
Flower 中的 FedVSSL 基线面向视频理解的联邦自监督预训练与下游微调全流程指南【免费下载链接】flowerFlower: A Friendly Federated AI Framework项目地址: https://gitcode.com/GitHub_Trending/flo/flower本文基于 flower 仓库baselines/fedvssl目录下的 README 与其对应源码、配置编写完整覆盖该基线从环境搭建、数据集准备、联邦 SSL 预训练到下游微调的端到端流程。FedVSSLFederated Self-supervised Learning for Video Understanding是由 Rehman 等人于 2022 年提出的面向视频理解的联邦自监督学习框架其核心思路是把联邦学习FL与视频自监督学习SSL结合在保护边缘设备视频数据隐私的前提下学习时空表征。本文以 flower 仓库中的baselines/fedvssl基线为线索系统讲解如何在 UCF-101 数据集上复现论文 Table 4 的实验包括 R3D-18 Catch-the-PatchCtP模型的联邦预训练、FedVSSL 自定义聚合策略的源码级剖析、数据集的 FL 分区以及集中式下游微调与评测。读完本文你将掌握一套可复现的「联邦自监督视频预训练 监督微调」完整实验流水线。FedVSSL 框架示意在联邦环境下集成不同聚合策略与部分权重更新的视频自监督预训练流程图片来源baselines/fedvssl/_static/FVSSL.pngFedVSSL 解决的问题边缘视频数据与自监督学习的鸿沟摄像头无处不在的移动设备在边缘产生了海量未标注视频数据。自监督学习SSL方法虽然能挖掘这些数据的潜在时空表征以用于下游任务训练但两个现实挑战阻碍了其大规模部署隐私顾虑视频数据包含高度敏感的个人信息集中式收集训练违反隐私预期通信成本视频数据量大、模型参数多集中式训练需要上传大量原始数据。FedVSSL 的应对方案是把联邦学习引入视频 SSL 任务让模型在数据不出设备的情况下完成自监督预训练。论文在 Kinetics-400 数据集模拟的大规模 FL 场景下评估了当时最先进的视频 SSL 技术指出其在 FL 集成时的不足并提出一个集成了不同聚合策略与部分权重更新的联邦 SSL 框架。论文实验表明FedVSSL 在下游检索任务上以 66.32% 的 Top-1 准确率优于集中式 SOTAUCF-101 提升 6.66%HMDB-51 提升 5.13%。仓库中的基线为论文《Federated Self-supervised Learning for Video Understanding》Rehman et al., 2022的复现实现主要复现 UCF-101 上 Table 4 的实验结果。如果要在自己的工作中使用该基线请记得同时引用原论文作者与 Flower 论文。基线概览本仓库复现了什么baselines/fedvssl目录下代码复现了论文中 UCF-101 的实验采用标准的 SSL 训练流水线分两部分联邦 SSL 预训练使用 CtP 自监督技术在 FL 设置下预训练 R3D-18 模型下游监督微调在 UCF-101 上对预训练模型做全网络微调与评测。其中预训练阶段使用 Flower 的模拟器simulation完成微调阶段以集中式方式不经 Flower在 MMCV 工具链下完成。目录结构baselines/fedvssl/ ├── _static/FVSSL.png # 框架示意图 ├── fedvssl/ │ ├── conf/ │ │ ├── base.yaml # Hydra 主配置FL 超参 FedVSSL 策略 │ │ └── mmcv_conf/ # MMCV 训练/测试配置 │ │ ├── pretraining/ # R3D-18 预训练配置UCF-101 / Kinetics-400 │ │ └── finetuning/ # R3D-18 微调与测试配置 │ ├── main.py # Hydra 入口编排客户端/策略/模拟 │ ├── strategy.py # FedVSSL 自定义聚合策略 │ ├── client.py # SslClientNumPyClient 实现 │ ├── server.py # 全局评估函数占位 │ ├── dataset.py / dataset_preparation.py │ ├── dataset_convert_to_json.py # 注释文件转 .json │ ├── data_partitioning_ucf.py # UCF-101 FL 分区脚本 │ ├── data_partitioning_k400.py # Kinetics-400 FL 分区脚本 │ ├── finetune_preprocess.py # .npz 全局权重 → .pth 格式 │ └── utils.py # MMCV 环境初始化、模型/数据加载 ├── pyproject.toml # Poetry 依赖清单 └── README.md硬件与运行开销参考原实验SSL 预训练 下游微调在 6×RTX-3090 GPU、128 CPU 线程的服务器上进行。以单客户端单 GPU 估算RTX 3090 上完成 1 个 epoch 的本地训练约需 34 秒A100 上约 17 秒。基线默认每轮 5 个客户端参与、共 20 轮单张 A100 即可在 1 小时内跑完联邦预训练。实验设置任务、模型与数据集任务与模型任务视频动作识别Action Recognition预训练使用 CtPCatch-the-Patch自监督技术预训练 R3D-18 模型CtP 实现位于克隆下来的fedvssl/CtP/pyvrl/models/pretraining/ctpR3D-18 骨干实现位于fedvssl/CtP/pyvrl/models/backbones/r3d.py微调在 UCF-101 上对预训练后的 R3D-18 做全网络微调。R3D-18 CtP 头的结构在 pretraining_for_ucf.py 中以 MMCV 配置形式给出骨干为 depth18 的 R3D4 个 stagestem 时空卷积核 3×3×3channel_multiplier1.0带 BNhead 部分将 512 维特征映射到 16 帧预测目标并定义了目标均值/标准差target_means(0,0,0,0)、target_stds(0.8,0.8,0.04,0.04)等 CtP 预测头参数。数据集论文预训练在 Kinetics-400 上进行但由于原数据集源与论文方提供的预处理脚本当前已不可用本基线演示改用 UCF-101 完成 SSL 预训练与监督微调也可通过 PyTorch 的torchvision.datasets.Kinetics获取 Kinetics 数据。数据集分区情况如下Dataset#classes#partitionspartitioning methodpartition settingsUCF10110110randomly partitioneduniformKinetics-400400100randomly partitioned8 classes per client训练超参数下表为直接运行python -m fedvssl.main时生效的默认超参数与 base.yaml 一一对应DescriptionDefault Valuetotal clients5clients per round5number of rounds20client resources{num_cpus: 2.0, num_gpus: 1.0}optimizerSGDalpha coefficient0.9beta coefficient1其中alpha即策略中的mix_coeff损失加权与 FedAvg 聚合的混合系数beta即swbeta随机权重平均 SWA 开关二者正是 FedVSSL 聚合策略的核心参数详见下文源码剖析。环境搭建系统前提需要已安装CUDA 11.7NVIDIA CUDA Toolkit 官方下载页面提供各平台安装包需要pyenv与Poetry工具链。创建 Python 环境# 使用 Python 3.10若未安装先执行 pyenv install version pyenv local 3.10.12 poetry env use 3.10.12 # 安装基础 Poetry 环境 poetry install # 激活环境 poetry shellpip 依赖清单 pyproject.toml 中几个值得注意的版本约束python 3.10, 3.12.0请勿更改flwr { extras [simulation], version 1.9.0 }模拟器功能依赖由 extras 声明hydra-core 1.3.2请勿更改与 main.py 的hydra.main用法绑定PyTorch 通过 CUDA 11.7 专属 wheel 安装torch1.13.1cu117、torchvision0.14.1cu117MMCV 全家桶mmengine0.10.0、mmcv-full1.7.1cu117/torch1.13.0 构建、yapf0.40.1、tensorboard2.18.0、numpy1.23.0。运行实验克隆 CtP 仓库与安装解压工具预训练依赖外部仓库 CtPCatch-the-Patch 官方实现需先克隆到指定位置并安装解压数据集所需工具# 激活 Poetry 环境在本目录执行 poetry shell # 克隆 CtP 仓库 git clone https://github.com/yan-gao-GY/CtP.git fedvssl/CtP # 解压数据集所需的额外工具 sudo apt install unrar unzip数据集准备下载 UCF-101 与标注文件cd fedvssl mkdir -p data/ucf101/ # 下载视频数据 wget https://www.crcv.ucf.edu/data/UCF101/UCF101.rar -O data/ucf101/UCF101.rar --no-check-certificate # 解压视频 unrar e data/ucf101/UCF101.rar data/ucf101/UCF101_raw/ # 下载训练/测试划分 wget https://www.crcv.ucf.edu/data/UCF101/UCF101TrainTestSplits-RecognitionTask.zip -O data/ucf101/UCF101TrainTestSplits-RecognitionTask.zip --no-check-certificate # 解压划分文件 unzip data/ucf101/UCF101TrainTestSplits-RecognitionTask.zip -d data/ucf101/预处理、转 JSON 与可选清理# 预处理数据集 python CtP/scripts/process_ucf101.py --raw_dir data/ucf101/UCF101_raw/ --ann_dir data/ucf101/ucfTrainTestlist/ --out_dir data/ucf101/ # 转换为 .json 文件 python dataset_convert_to_json.py # 可选删除原始文件以释放空间 rm data/ucf101/UCF101.rar rm -r data/ucf101/UCF101_raw/执行 FL 数据分区python data_partitioning_ucf.py --json_path data/ucf101/annotations --output_path data/ucf101/annotations/client_distribution/ --num_clients 5 cd ..分区脚本 data_partitioning_ucf.py 的实现逻辑很直观读取train_split_1.json中全部视频样本 → 使用固定随机种子默认--seed 7random.shuffle打乱 → 按客户端数均分成num_clients份 → 分别写出client_dist1.json、client_dist2.json…… 共num_clients个文件到输出目录。每个客户端文件会被 main.py 的initial_setup通过cfg.data.train.data_source.ann_file partition_dir /client_dist str(cid1) .json挂载到对应客户端的数据源上从而保证每个 Flower 客户端只看到自己的视频分区。注意客户端编号从 0 开始cid与文件名的对应关系是client_dist{cid1}.json。分区完成后annotations/client_distribution/目录路径正是 base.yaml 中partition_dir的默认值。联邦 SSL 预训练运行 FedVSSL# 使用默认设置运行联邦 SSL 训练 python -m fedvssl.main # 通过命令行覆盖配置例如将 alpha 设为 1、轮数设为 100 python -m fedvssl.main strategy.mix_coeff1 rounds100运行 FedAvg对照实验# 运行 FedAvg 基线以匹配论文中的实验设置 python -m fedvssl.main strategy.fedavgtrue # 该配置同样支持命令行覆盖运行任一命令后会在outputs/DATE/TIME/fedvssl_results下生成目录结构用于保存全局检查点与各客户端的训练日志。配置文件 base.yaml 详解预训练默认配置见 base.yaml其结构即 Hydra 的DictConfig可通过命令行点号语法覆盖任意字段### FL 预训练超参数 ### exp_name: fedvssl_results data_dir: fedvssl/data partition_dir: annotations/client_distribution cfg_path_pretrain: fedvssl/conf/mmcv_conf/pretraining/r3d_18_ucf101/pretraining_for_ucf.py # FL 设置 pool_size: 5 # 客户端池大小模拟器注册的客户端总数 rounds: 20 # 联邦训练总轮数 # FedVSSL 策略 strategy: _target_: fedvssl.strategy.FedVSSL mix_coeff: 0.9 # 论文中的 alpha混合损失加权与 FedAvg 聚合 swbeta: 1 # 论文中的 beta0SWA 关1SWA 开 base_work_dir: ??? # 运行时由 main.py 注入Hydra 输出目录下 fraction_fit: 1.0 # 每轮参与拟合的客户端比例 min_fit_clients: 5 min_available_clients: 5 fedavg: false # true 时退化为标准 FedAvg # Ray 模拟器资源 client_resources: num_gpus: 1.0 num_cpus: 2 include_dashboard: falsemain.py启动时的工作流main.pyinit_p_paths(fedvssl)修正工作目录并把 CtP 仓库路径插入sys.path保证能import fedvssl.CtP.*从cfg.strategy用 Hydra 的instantiate构建FedVSSL策略并注入on_fit_config_fnfit_config每轮把全局轮次epoch_global下发给客户端client_fn(cid)为每个客户端执行initial_setup解析 MMCV 配置、指定该客户端的数据分区文件、加载 R3D-18CtP 模型与训练数据随后封装为SslClient调用fl.simulation.start_simulation启动 Ray 模拟ServerConfig(num_roundscfg.rounds)决定总轮数。FedVSSL 聚合策略源码剖析本基线最核心的自定义逻辑在 strategy.py 的FedVSSL(fl.server.strategy.FedAvg)类中strategy.py其aggregate_fit实现了论文中的关键机制双路聚合同时计算两类加权平均——weights_avg aggregate(weight_results)按每个客户端样本数加权的标准FedAvgweights_loss aggregate(loss_results)按客户端上报损失fit_res.metrics[loss]加权的loss-based 聚合Equation 3 混合按论文公式将两者线性混合weights mix_coeff × weights_avg (1 − mix_coeff) × weights_loss即alpha0.9时 90% 权重来自 FedAvg、10% 来自损失加权随机权重平均SWA当swbeta1且server_round 1时从base_work_dir读取最近一次保存的全局权重做0.5 × 新权重 0.5 × 旧权重的 SWA 再保存全局检查点保存每轮以round-{server_round}-weights.array.npz形式保存全局权重fedavgtrue时跳过 loss 混合与 SWA直接按 FedAvg 聚合用于论文对照实验。部分权重更新体现在客户端 client.py 的set_parameters中client.py服务端下发的全局参数只更新state_dict键名以backbone开头的权重分类头cls等权重保留客户端本地值这正是论文所述partial weight updating的具体实现。客户端训练中若本地work_dir存在历史epoch_*.pth检查点会先恢复再以全局参数覆盖骨干权重继续训练。客户端在fit结束后上报的损失为exp(-avg_loss)client.py其中avg_loss取自 MMCV 训练日志*_log.json中所有 step 损失的平均值该值作为metrics[loss]返回供服务端 loss-based 聚合使用。下游微调下游微调不涉及 Flower以集中式方式在 UCF-101 上完成。首先需要把预训练产出的.npz全局权重转换为 MMCV 可加载的.pth格式# 在实验输出目录中查找检查点outputs/DATE/TIME/fedvssl_results 下 python -m fedvssl.finetune_preprocess --pretrained_model_pathCHECKPOINT.npzfinetune_preprocess.py 的实现加载finetune_ucf101.py微调配置构建模型 →np.load读取.npz兼容Flower Parameters 对象与裸 NumPy 数组两种存储形式前者经parameters_to_ndarrays还原→ 按model.state_dict()键顺序打包为torch.save的./model_pretrained.pth。随后用 CtP 的分布式训练脚本启动微调结果保存在新建的finetune_results目录bash fedvssl/CtP/tools/dist_train.sh fedvssl/conf/mmcv_conf/finetuning/r3d_18_ucf101/finetune_ucf101.py 1 --work_dir./finetune_results --data_dirfedvssl/data该脚本的第一个参数是配置文件路径第二个参数是用于微调的 GPU 数量。微调完成后执行测试bash fedvssl/CtP/tools/dist_test.sh fedvssl/conf/mmcv_conf/finetuning/r3d_18_ucf101/test_ucf101.py 1 --work_dir./finetune_results --data_dirfedvssl/data --progress预期结果场景一UCF-101 预训练 UCF-101 微调论文原预训练在 Kinetics-400 上进行若无服务器级硬件6×RTX 3090 约需 1 天代价较大。为验证 FedVSSL本基线提供直接在 UCF-101 上预训练的命令python -m fedvssl.main模拟 5 个客户端分布的 cross-silo 场景CtP SSL 联邦预训练 20 轮随后在 UCF-101 上对整个网络微调 150 个 epoch。预训练细节全部记录在 base.yaml 中。MethodFL-SetupClientsPretrain DatasetFinetune DatasetTop-1% Acc.Top 5% Acc.FedVSSL(alpha0.9,beta1)Cross-Silo5UCF-101UCF-10166.32%86.57%场景二Kinetics-400 预训练 UCF-101 微调仓库 README 同时提供 Kinetics-400 上预训练好的 SSL 模型检查点文件名为round-540.npz按组合形式提供下载以其为起点可直接在 UCF-101 上微调复现论文结果MethodUCF Top-1FedVSSL(alpha0,beta0)79.91FedVSSL(alpha1,beta0)79.14FedVSSL(alpha0,beta1)79.43FedVSSL(alpha1,beta1)78.99FedVSSL(alpha0.9,beta0)80.62FedVSSL(alpha0.9,beta1)79.41各检查点文件round-540.npz与alpha/beta组合的对应关系及下载入口可参考baselines/fedvssl/README.md中的 Checkpoint 表格下载后将路径传给--pretrained_model_path即可进入微调流程。关键注意事项路径绑定预训练依赖克隆到fedvssl/CtP的 CtP 仓库utils.py的init_p_paths与sys.path注入均以该相对位置为前提请勿改动目录名版本锁定Python 3.10、hydra-core 1.3.2、flwr 1.9.0、CUDA 11.7 下的 PyTorch 1.13.1 与 mmcv-full 1.7.1 是经过验证的组合升级任一组件可能导致 MMCV 接口不兼容部分权重更新联邦训练期间只有backbone前缀参数参与同步这是 FedVSSL 设计的一部分不要在客户端随意开启全量参数更新checkpoint 格式服务端保存的是.npzFlower 参数或 NumPy 数组两种形式微调前必须经finetune_preprocess.py转为.pth其保存位置默认在运行目录下生成./model_pretrained.pth客户端不上报测试指标SslClient.evaluate为占位实现恒返回 accuracy0预训练阶段不做客户端本地评测全部评估放到下游微调阶段进行。综上baselines/fedvssl给出了一条完整、可复现的「联邦自监督视频预训练 → 集中式监督微调」链路既有 Hydra 统一配置与 Ray 模拟的工程化实现又通过FedVSSL策略落地了论文的 loss 混合聚合Equation 3与 SWA 两项核心机制是研究联邦视频 SSL 的可靠起点。【免费下载链接】flowerFlower: A Friendly Federated AI Framework项目地址: https://gitcode.com/GitHub_Trending/flo/flower创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价