返回作品列表

项目记录 / 联邦学习

基于联邦学习的
口罩识别系统.

从已有口罩识别基线出发,我参与搭建了 Flower 多客户端训练模拟,并在小组项目基础上独立撰写论文,研究客户端数量与本地训练轮数对准确率和训练耗时的影响。

我的参与
主要代码实现、数据处理与独立论文撰写
项目背景
小组课程项目 → 独立研究论文
技术主题
Python · PyTorch · Flower

从本地训练到全局评估。

  1. 01

    客户端本地训练

    各客户端在本地数据分区训练轻量 CNN

  2. 02

    服务器聚合

    基于 FedAvg 聚合更新,保存全局模型与训练指标

  3. 03

    独立测试集评估

    用未参与训练的图像评估全局模型的损失与准确率

小组阶段的口罩识别训练流程:在本机启动多个客户端进程模拟分布式训练,并非真实多设备部署。

01 / 小组阶段

将口罩识别基线扩展为联邦训练。

团队以已有的口罩识别项目为基线,用 PyTorch 构建轻量 CNN,对佩戴口罩和未佩戴口罩的图像进行二分类,再用 Flower 在本机模拟分布式训练。数据被划分为各客户端的本地分区;客户端分别训练并返回模型参数与指标,服务器通过基于 FedAvg 的自定义策略聚合更新,保存全局模型并记录训练准确率和损失。

小组阶段的启动脚本运行一个服务器和五个客户端进程。训练结束后,我们用独立、未参与训练的测试集评估全局模型,以交叉熵损失衡量预测误差,以分类准确率衡量识别效果。这是本地多进程模拟,不代表已经完成真实多设备部署。

PPT 中的 CIFAR-10 非 IID 实验是小组阶段另一项探索,关注数据分布不均衡和本地训练配置;它与这里展示的口罩识别训练记录分开,不作为口罩识别结果引用。

小组阶段训练记录:Training Accuracy per Round,横轴为聚合轮次 Round,纵轴为训练准确率 Accuracy;曲线先上升,随后趋于稳定。
小组阶段训练记录 · 训练准确率随聚合轮次变化。来源:小组汇报 PPT 第 10 页,不是后续论文的配置比较结果。查看原图
小组阶段训练记录:Training Loss per Round,横轴为聚合轮次 Round,纵轴为训练损失 Loss;曲线先下降,随后在较低水平波动。
小组阶段训练记录 · 训练损失随聚合轮次变化。来源:小组汇报 PPT 第 10 页,不是独立测试集的评估曲线。查看原图

保留原图标题、坐标轴和刻度。窄屏下可在图内左右滑动(键盘聚焦后使用方向键),或打开原图放大查看。

02 / 我的贡献

贯通数据、训练、评估与本地预测。

根据小组汇报的 Division of Work(第 21 页),我负责训练与测试数据的收集和处理,以及口罩识别联邦训练流程的主要代码实现,并承担分布式训练实现部分的汇报。这些工作是团队协作中的主要贡献,而不是对整个小组成果的独占归属。

01

数据准备与模型

我收集并处理训练数据和测试数据,组织佩戴口罩/未佩戴口罩两类图像;实现 dataset.py 的数据加载与客户端等分逻辑,以及 model.py 中的轻量 CNN,为本地训练和独立测试准备一致的输入流程。

02

客户端训练与服务器聚合

我主要实现 client.py 和 server.py:客户端通过 Flower 的 NumPyClient 加载本地数据、训练并返回参数和指标;服务器使用基于 FedAvg 的策略聚合模型更新,按轮保存全局模型、记录准确率和损失,并在训练结束后生成曲线。

03

实验启动与模型评估

我实现 run_all.py 来启动服务器和多个带不同 CLIENT_ID 的客户端进程,串联本地模拟流程;实现 evaluate_model.py,在独立测试集上计算交叉熵损失和分类准确率,检查全局模型对未见图像的识别效果。

04

本地预测界面

我实现 predict_gui.py 的本地图形界面,加载训练后的模型,让用户上传图像并查看口罩分类预测。

小组阶段本地预测工具:Mask Detection 窗口显示佩戴口罩的示例图、Prediction: With Mask 预测结果和 Upload Image 上传按钮。
小组阶段本地工具 · 对佩戴口罩示例图的预测结果为 With Mask。来源:小组汇报 PPT 第 12 页。查看原图
小组阶段本地预测工具:Mask Detection 窗口显示未佩戴口罩的示例图、Prediction: Without Mask 预测结果和 Upload Image 上传按钮。
小组阶段本地工具 · 对未佩戴口罩示例图的预测结果为 Without Mask。来源:小组汇报 PPT 第 12 页。查看原图

03 / 后续论文

从单次训练流程到配置权衡研究。

在小组项目基础上,我独立撰写了论文《Federated Learning on Mask recognition with its local simulation and optimization》,研究客户端数量与本地训练轮数(local epochs)不同组合下的模型表现。这里的本地训练轮数指客户端每次参与聚合前的训练遍数,与服务器的聚合轮次不同。

结合项目 README,后续分析用 Pareto 前沿呈现准确率与训练耗时之间的权衡:关注无法在不牺牲另一项指标的前提下继续改进的配置,而不是只按最高准确率排序。统计比较使用 Friedman 检验,并通过 Nemenyi 检验比较配置间的差异。这里说明分析方法,不引用缺少明确出处的最优组合、显著性结论或具体实验数值。

期刊页面显示论文已于 2025 年 10 月 23 日发表,收录于 STECEP,第 3 卷第 5 期,作者为 Liukai Tang。论文状态以期刊页面为准;项目 README 中的 “Under Review” 是较早的记录。

04 / 项目链接

阅读论文与实现记录。

论文页面提供发表信息和全文入口;仓库 README 记录运行流程、Pareto 分析和统计检验脚本。使用仓库内容前,请查看其许可与使用说明。

回到首页,继续探索