<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Pytorch | 个人主页</title><link>https://page.javaer.site/tags/pytorch/</link><atom:link href="https://page.javaer.site/tags/pytorch/index.xml" rel="self" type="application/rss+xml"/><description>Pytorch</description><generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>zh-Hans</language><lastBuildDate>Mon, 20 May 2024 00:00:00 +0000</lastBuildDate><image><url>https://page.javaer.site/media/icon_hu7729264130191091259.png</url><title>Pytorch</title><link>https://page.javaer.site/tags/pytorch/</link></image><item><title>FedSeg论文阅读报告</title><link>https://page.javaer.site/teaching/fedseg/</link><pubDate>Mon, 20 May 2024 00:00:00 +0000</pubDate><guid>https://page.javaer.site/teaching/fedseg/</guid><description>&lt;h2 id="fedseg-class-heterogeneous-federated-learning-for-semantic-segmentation">&lt;strong>《FedSeg: Class-Heterogeneous Federated Learning for Semantic Segmentation》&lt;/strong>&lt;/h2>
&lt;h2 id="文献阅读报告">&lt;strong>文献阅读报告&lt;/strong>&lt;/h2>
&lt;h3 id="1-论文摘要">1. 论文摘要&lt;/h3>
&lt;p>作者的工作主要集中在提出一种新的联邦学习方法&lt;code>FedSeg&lt;/code>，用于解决类别异构语义分割任务中的挑战。主要贡献如下：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>问题识别&lt;/strong>：识别并指出了现有联邦学习在语义分割任务中的挑战，特别是在非独立同分布（non-IID）数据和类别异构的情况下。&lt;/li>
&lt;li>&lt;strong>改进损失函数&lt;/strong>：提出了一种修改版的交叉熵损失函数&lt;code>BackLoss&lt;/code>，以纠正客户端局部优化问题并解决前景-背景不一致的问题。&lt;/li>
&lt;li>&lt;strong>像素级对比学习&lt;/strong>：引入像素级对比学习&lt;code>Pixel Contrastive Learning&lt;/code>，增强本地像素嵌入与全局语义空间的一致性。&lt;/li>
&lt;li>&lt;strong>实验验证&lt;/strong>：在&lt;code>Cityscapes&lt;/code>、&lt;code>CamVID&lt;/code>、&lt;code>PascalVOC&lt;/code>和&lt;code>ADE20k&lt;/code>四个语义分割基准上进行了大量实验，验证了FedSeg方法的有效性。&lt;/li>
&lt;/ol>
&lt;h3 id="2-论文引言">2. 论文引言&lt;/h3>
&lt;p>首先，语义分割是将给定图像中的每个像素分配唯一的语义标签的任务。这意味着对图像中的每个像素进行分类，以确定其所属的语义类别。语义分割任务中有两个问题。&lt;/p>
&lt;ol>
&lt;li>像素级别的数据很难获取，并且模型的训练需要大量的数据&lt;/li>
&lt;li>合作训练有泄漏用户隐私的风险，例如居住照片可能泄漏用户的居住地，车辆行驶图片可能泄漏用户的个人数据等。&lt;/li>
&lt;/ol>
&lt;p>基于上述两个问题，在语义分割任务中引入联邦学习是很有必要的。之后来简单介绍一下什么是联邦学习。&lt;/p>
&lt;p>&lt;strong>联邦学习&lt;/strong>（&lt;strong>Federated Learning&lt;/strong>，&lt;strong>FL&lt;/strong>）是一种新兴的分布式机器学习方法(&lt;strong>之后简称为FL&lt;/strong>)，其核心理念是通过多个参与方（如智能设备、机构等）在不共享本地数据的情况下，协同训练一个全局模型。联邦学习旨在解决数据隐私、安全性和数据孤岛等问题，使各方能够共同受益于联合模型的优势，而无需交换或集中存储敏感数据，&lt;strong>图1&lt;/strong>是联邦学习的基本流程。&lt;/p>
&lt;img src="文献阅读报告.assets/image-20240605193242221.png" alt="image-20240605193242221" style="zoom:50%;" />
&lt;center>图1 - 联邦学习&lt;/center>
&lt;p>联邦学习通常包含四个步骤：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>本地训练&lt;/strong>：本地训练是联邦学习的起点。在这一阶段，每个参与的客户端（例如，个人设备、组织服务器）在本地数据集上训练模型。此时数据不会离开本地设备，保持数据的隐私性和安全性。&lt;/li>
&lt;li>模型更新：在本地训练完成后，每个客户端将其训练得到的模型参数发送回中央服务器或协调节点。这样可以确保中央服务器能够获得来自不同客户端的最新模型信息。&lt;/li>
&lt;li>模型聚合：中央服务器接收到所有客户端的模型参数后，将这些参数进行聚合，生成一个新的全局模型。这一步是联邦学习的核心步骤，旨在整合各个客户端的训练成果，提升模型的整体性能。&lt;/li>
&lt;li>模型部署：在模型聚合完成后，更新后的全局模型被部署到各个客户端，以便在下一个训练周期中使用。这个步骤确保每个客户端都能够从最新的全局模型中受益，从而不断提高模型的性能。&lt;/li>
&lt;/ol>
&lt;p>本论文就是在本地训练过程中进行研究。本篇论文聚焦于面向语义分割的类异构联邦学习，然而，先前的大多数FL方法在分类任务上进行评估，而很少有工作专注于更具挑战性的语义分割。相较于分类任务，语义分割具有特定且更为严重的问题。首先，语义分割图像更加复杂，像素级别的注释极其耗时。客户端通常会对频繁出现的类别进行标注，而忽略稀有类别。&lt;/p>
&lt;p>之后来看一下联邦学习用于语义分割中的两个基本问题以及作者提出的解决办法。&lt;/p>
&lt;img src="文献阅读报告.assets/image-20240605194922976.png" alt="image-20240605194922976" style="zoom:50%;" />
&lt;center>图2 - 前景后景不一致导致的本地最优化方向不同&lt;/center>
&lt;p>首先，由于不同客户端的数据分布是非独立同分布的，一个客户端忽略的类别可能在另一个客户端是前景类别。对于&lt;strong>图2&lt;/strong>中，Person在1中被忽略，但是在2中被识别为主要类。Cat在2中被忽略，但是在3中被识别为主要类。跨客户端的前景-背景不一致性导致了分散的优化方向，并降低了聚合的全局模型的能力。&lt;/p>
&lt;p>针对此问题，作者修改了交叉熵损失函数，通过聚合背景类别的概率来校正本地更新中的“客户端漂移”，缓解了前景-背景不一致性问题。&lt;/p>
&lt;img src="文献阅读报告.assets/image-20240605195002874.png" alt="image-20240605195002874" style="zoom:50%;" />
&lt;center>图2 - 无法学习到不同语义类别在像素嵌入空间中的相对位置导致的嵌入空间混乱&lt;/center>
&lt;p>其次，对于非独立同分布的情况，复杂的密集预测使得本地优化方向与全局最优点的距离比分类任务更远，导致收敛性较差。从像素嵌入空间的角度来看，每个客户端的本地更新无法学习到不同语义类别在像素嵌入空间中的相对位置，从而在全局聚合后导致混乱的嵌入空间。如图所示，各种不同的语义类别无法在全局空间中被正确的区分开来。&lt;/p>
&lt;p>针对此问题，作者进一步引入了一个本地到全局的像素级对比学习损失，强化本地像素嵌入空间与全局语义空间的接近程度，提高了全局模型的收敛性。&lt;/p>
&lt;p>总的来说，作者做出来如下贡献：&lt;/p>
&lt;ul>
&lt;li>
&lt;p>系统地研究了联邦学习在语义分割任务中应用于多种类别情况下的情况，特别是类异构问题。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>提出了一个强有力的基准模型，采用了简单修改的CE损失和局部到全局的度量学习方法，以缓解客户端之间的类别分布漂移问题。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>在四个语义分割数据集上提供了基准结果，评估了FedSeg在语义分割联邦学习问题上的表现。希望这项工作能够激励联邦学习社区进一步研究联邦学习问题。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h3 id="3-fedseg方法">3. FedSeg方法&lt;/h3>
&lt;h4 id="31-fedavg">3.1. FedAvg&lt;/h4>
&lt;p>作者采用了&lt;code>FedAvg&lt;/code>作为基本的联邦学习方法。&lt;strong>图3&lt;/strong>展示了FedAvg的基本流程和方法。&lt;/p>
&lt;img src="文献阅读报告.assets/image-20240605200646280.png" alt="image-20240605200646280" style="zoom:50%;" />
&lt;center>图3 - FedAvg的基本流程和方法&lt;/center>
&lt;p>&lt;strong>FedAvg（Federated Averaging）&lt;/strong> 是一种用于联邦学习（Federated Learning, FL）的基本算法。其目标是在保证数据隐私的前提下，通过多个客户端（Clients）协同训练一个共享的全局模型。Avg指的是模型聚合的时候平均所有客户端权重，算法基本流程如下：&lt;/p>
&lt;p>&lt;strong>参数定义&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>K ：客户端总数&lt;/li>
&lt;li>B ：本地小批量数据的大小&lt;/li>
&lt;li>E ：本地训练的轮数&lt;/li>
&lt;li>η：学习率&lt;/li>
&lt;li>C ：选择客户端的比例（例如图中C=0.1 表示每轮选取10%的客户端）&lt;/li>
&lt;/ul>
&lt;h5 id="服务器端执行">服务器端执行&lt;/h5>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>初始化全局模型参数&lt;/strong> &lt;/p>
$$w_0$$&lt;/li>
&lt;li>
&lt;p>&lt;strong>进行多轮训练&lt;/strong>（每轮训练包括以下步骤）：&lt;/p>
&lt;ul>
&lt;li>计算参与本轮训练的客户端数量 $$m$$，公式为 $$m \leftarrow \max(C \cdot K, 1)$$&lt;/li>
&lt;li>随机选取 $$m$$ 个客户端构成集合 $$S_t$$&lt;/li>
&lt;li>对于每个客户端 $$k \in S_t$$，并行地执行以下步骤：
&lt;ul>
&lt;li>客户端 $$k$$ 进行本地模型更新 $$w_{t+1}^k \leftarrow \text{ClientUpdate}(k, w_t)$$&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>聚合所有客户端的本地模型参数，更新全局模型参数：
$$
w_{t+1} \leftarrow \sum_{k=1}^K \frac{n_k}{n} w_{t+1}^k
$$
其中，$$n_k$$ 是客户端 $$k$$ 的本地数据量，$$n$$ 是所有客户端数据量的总和。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;h5 id="客户端执行">客户端执行&lt;/h5>
&lt;p>&lt;strong>ClientUpdate(k, w)&lt;/strong> 在客户端 &lt;/p>
$$k$$&lt;p> 上运行，具体步骤如下：&lt;/p>
&lt;ol>
&lt;li>
&lt;p>将客户端的数据集 &lt;/p>
$$P_k$$&lt;p> 分成大小为 &lt;/p>
$$B$$&lt;p> 的小批量数据&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>进行本地训练&lt;/strong>（每个本地训练轮数为 &lt;/p>
$$E$$&lt;p>）：&lt;/p>
&lt;ul>
&lt;li>对于每一小批量数据 $$b \in \mathcal{B}$$，执行以下步骤：
&lt;ul>
&lt;li>使用批量数据 $$b$$ 更新模型参数 $$w$$：
$$
w \leftarrow w - \eta \nabla \ell(w; b)
$$
其中，$$\ell(w; b)$$ 是批量数据 $$b$$ 上的损失函数。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>将本地更新后的模型参数 &lt;/p>
$$w$$&lt;p> 返回给服务器。&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h5 id="fedavg算法特点">&lt;strong>FedAvg算法特点&lt;/strong>&lt;/h5>
&lt;ul>
&lt;li>&lt;strong>数据隐私&lt;/strong>：数据从不离开客户端，保护了用户的隐私。&lt;/li>
&lt;li>&lt;strong>分布式训练&lt;/strong>：多个客户端并行进行本地训练，提高了训练效率。&lt;/li>
&lt;li>&lt;strong>非独立同分布（Non-IID）数据处理&lt;/strong>：FedAvg能够处理不同客户端上的非独立同分布的数据，尽管这会对模型收敛带来挑战。&lt;/li>
&lt;/ul>
&lt;img src="文献阅读报告.assets/image-20240605202333348.png" alt="image-20240605202333348" style="zoom:50%;" />
&lt;center>图4 - FedAvg实验评估&lt;/center>
&lt;p>上面左边四张图中，横坐标为通信轮次，纵坐标为准确率。可以看到，FedAvg可以用较少的通信轮次达到较高的准确率。右边图中，横坐标为通信轮次，纵坐标为训练损失，可以看到，FedAvg在通信轮次较少的时候可以达到一个相对较低的损失。以上实验证明了&lt;strong>FedAvg是可行的。可以用少的通信轮次达到较好的效果&lt;/strong>。&lt;/p>
&lt;h4 id="32-初步定义">3.2 初步定义&lt;/h4>
&lt;p>在这一节中，作者首先定义了他们的方法的基础和目标。他们考虑一个有 N 个客户端的场景，每个客户端有一个本地语义分割数据集 $D_i$。在类别异构的设置中，不同客户端的类别概率分布是不相同的，即 $P_{c\sim D_i} \not～ P_{c\sim D_j}$ 对于$i \not= j$ 。目标是训练一个在组合数据集 $D:= U^N_{i=1}D_i $上的语义分割模型 $w$，且不共享原始数据。目标是最小化全局损失 $L(w)$，定义为：
&lt;/p>
$$
arg min_{w} L(w) = \sum_{i=1}^{N} \frac{|D_i|}{D_i} L_i(w)
$$&lt;p>
其中 $Li(w)=E(x,y)_{∈Di}[li(x,y;w)] $代表客户端 $i$ 的本地目标。使用的框架是 FedAvg，每个训练轮次涉及客户端在各自数据集上优化本地模型。服务器通过取本地模型的加权平均来更新全局模型：
&lt;/p>
$$
w=\sum_{i=1}^{N}\frac{|D_i|}{|D|}w_i
$$&lt;p>
其中 $w_i$ 表示客户端 $i$ 的本地参数。作者提出对本地优化过程进行修改，以在不交换额外信息的情况下提升性能。&lt;/p>
&lt;h4 id="33-backce-loss">3.3. BackCE Loss&lt;/h4>
&lt;p>在集中学习中，交叉熵（CE）损失是语义分割的标准目标函数。CE 损失定义为：
&lt;/p>
$$
L_{ce}(x,y)=-\frac{1}{|P|}\sum_{j\in P}logq_x(j,y_i)
$$&lt;p>
其中 $y_j$ 是像素 $j$ 的真实标签，$P$ 是标注像素的集合。在联邦学习（FL）中，本地客户端只有总类的一部分，导致本地优化方向不一致，全局收敛性差。&lt;/p>
&lt;p>为了解决这个问题，作者修改了 CE 损失，通过聚合本地客户端数据集中不存在的类别的概率来纠正本地优化方向。修改后的 CE 损失是：
&lt;/p>
$$
L_i^{backce}(x,y)=-\frac{1}{|P|}\sum_{j\in P}log\hat{q_x}(j,y_j)
$$&lt;p>
其中 $P$ 是所有像素的集合，$\hat{q}_x(j,c)$ 表示聚合的概率。定义为：
&lt;/p>
$$
\hat{q}_x(j, y_j) = \begin{cases}
q_x(j, y_j) &amp; \text{if } y_j \in C_i, \\
\sum_{c \in C \setminus C_i} q_x(j, c) &amp; \text{if } y_j \notin C_i,
\end{cases}
$$&lt;p>其中： $C_i$ 是客户端 $i$ 本地数据集中的类别集合。 $C$ 是全局类别集合。 $q_x(j, c)$ 是像素 $j$ 被预测为类别 $c$ 的概率。&lt;/p>
&lt;p>从优化的角度来看，提出的$L_{\text{backce}}$的目的是纠正优化，使其类似于集中式学习。假设像素$j$的类别$c$的预测logit为$z_{jc}$，则$L_{\text{ce}}$关于$z_{jc}$的梯度为：&lt;/p>
$$
\frac{\partial L_{\text{ce}}}{\partial z_{c}^{j}} =
\begin{cases}
p_{c}^{j} - 1 &amp; \text{if } y_j = c \\
p_{c}^{j} &amp; \text{if } y_j \neq c
\end{cases}
\tag{6}
$$&lt;p>其中，$p_{jc} = \frac{e^{z_c}}{\sum_{k=1}^{K} e^{z_k}}$是像素$j$的类别$c$的预测概率。为了简化公式中的符号，使用$z_c$代替$z_{jc}$。对于集中式语义分割，由于数据集中包含所有类别，因此关于$z_c$的优化考虑了像素标签是否为$c$，包含了正方向和负方向的梯度。&lt;/p>
&lt;p>然而，对于去中心化的联邦学习，假设客户端$i$的标注数据只包含类别$l$。对于类别$c \notin C_i$，标准CE损失关于$z_c$的优化仅为正方向，即：$\frac{∂L_{ce}}{∂z_c}=p_c > 0$ 这会使得优化方向远离全局最优。因此，作者通过$L_{backce}$来修正优化方向。对于标签$y_i \notin l$的背景像素，$L_{backce}$相对于$z_c$的梯度如下所示。
&lt;/p>
$$
\frac{\partial L_{backce}}{\partial z_c} = - \frac{e^{z_c}}{\sum_{k=1}^{K} e^{z_k}} \cdot \frac{e^{z_l}}{\sum_{k \neq l} e^{z_k}} = -p_c \cdot \frac{e^{z_l}}{\sum_{k \neq l} e^{z_k}} \approx -p_c \cdot p_l
$$&lt;p>
其中，$p_c$和$p_l$分别表示类别$c$和$l$的预测概率。公式表明对于客户端i中的背景像素（即$y_j \not= l$），$L_{backce}$为类别$c$的$logit \ z_c$提供了负方向的优化，这与两个项$p_c$和$p_l$相关。由于本地模型是从包含所有类别信息的聚合全局模型开始的，预测概率可以提供伪标签信息。如果p_c较大，即像素标签y_j为c的预测概率高，则梯度 $\frac{\partial L_{backce}}{\partial z_c} $相对于类别c更大。如果$p_l$较大，因为标签不是$l$，梯度提供了一个更大的数值，使得优化方向指向类别c并远离类别l。&lt;/p>
&lt;p>通过这种方式，修改后的交叉熵损失将本地客户端未包含的类别视为背景类，从而纠正本地优化方向，减轻由于前景-背景不一致而引起的本地更新漂移问题。 为了更具体地理解，假设在客户端 $i$ 的数据集中不存在某些类别 $y_j$ ，则这些类别的预测概率会被视为背景类的概率进行聚合。这种处理方法使得本地客户端能够更好地对齐全局优化目标，改善全局模型的收敛性。 这种方法不仅简化了模型的训练过程，还通过纠正本地优化方向，有效地解决了类别异构问题，从而提升了语义分割任务的整体性能。&lt;/p>
&lt;h4 id="34-local-to-global-pixel-contrastive-learning">3.4. &lt;strong>Local-to-Global Pixel Contrastive Learning&lt;/strong>&lt;/h4>
&lt;p>传统的 FL 方法，如 FedProx 和 MOON，通过在本地和全局模型之间应用粗糙的约束来解决非独立同分布（non-IID）问题。然而，这些方法对语义分割的密集预测任务是不够的。&lt;/p>
&lt;p>为了改进这一点，作者提出了一种局部到全局像素对比学习方法。在本地更新过程中，从本地和全局模型中提取像素表示。目标是将本地像素表示拉近到同类别的全局表示，同时将它们推离不同类别的表示。这种细粒度的方法有助于对齐本地像素嵌入空间和全局嵌入空间。&lt;/p>
&lt;p>局部到全局像素对比损失定义为：
&lt;/p>
$$
L^{con}_j=\frac{1}{|P_j|}\sum_{v_+\in P_j}-log\frac{exp(v_l·v_+/τ)}{exp(v_l·v_+/τ)+\sum_{v_-\in N_j}exp(v_l·/v_-τ)}
$$&lt;p>公式中的元素含义如下：&lt;/p>
&lt;p>$v_l$：局部模型提取的像素表示。&lt;/p>
&lt;p>$c$：像素的语义标签。&lt;/p>
&lt;p>$v_{g+}$：全局模型提取的属于相同标签 $c$ 的像素表示，作为正样本。&lt;/p>
&lt;p>$v_{g-}$：全局模型提取的属于其他类别 $C \setminus c$ 的像素表示，作为负样本。&lt;/p>
&lt;p>$L_{\text{con}}$：局部到全局像素对比损失。&lt;/p>
&lt;p>$\tau$：温度超参数，用于调整对比损失的尺度。&lt;/p>
&lt;p>$P^j$：像素 $j$ 的正样本集合。&lt;/p>
&lt;p>$N^j$：像素 $j$ 的负样本集合。&lt;/p>
&lt;p>在联合学习（FL）训练中，面对类别异构的问题，局部客户端只包含部分语义标签，而负样本不足。背景像素可能包含其他语义类别。因此，作者提出利用全局模型为背景像素提供伪标签，因为聚合的全局模型能够预测所有语义类别。作者设定了一个阈值 θ，如果像素的预测概率大于 θ，则将其标注为对应类别的伪标签。&lt;/p>
&lt;p>综上所述，最终的目标函数为
&lt;/p>
$$
L = L_{\text{backce}} + \lambda L_{\text{con}}
$$&lt;p>
其中 $\lambda$ 是一个超参数，用于控制像素对比损失的权重。&lt;/p>
&lt;h3 id="4-实验验证">4. 实验验证&lt;/h3>
&lt;h4 id="41-数据设置">4.1 数据设置&lt;/h4>
&lt;p>作者在四个语义分割数据集上进行了实验，即&lt;code>Cityscapes&lt;/code> 、&lt;code>CamVID&lt;/code> 、&lt;code>PascalVOC&lt;/code> 和 &lt;code>ADE20k&lt;/code> ，之后我来简单介绍一下这些数据集。&lt;/p>
&lt;ul>
&lt;li>**Cityscapes 和 CamVID **：这两个数据集包含街景图像，分别具有19个和11个语义类别。不同于分类任务，语义分割数据集中的图像包含许多类别的对象，这些对象很难拆分。为了生成类异质的数据分区，我们将Cityscapes和CamVID划分为K个子集。每个子集保留一到两个语义类别，其他类别设置为背景。对于Cityscapes和CamVID，K分别设置为19和11。在这种设置下，不同客户端之间存在前景-背景不一致的问题。&lt;/li>
&lt;li>**PascalVOC **：这是一个图像语义分割数据集，包含2,913张图像、20个前景类别和一个背景类别。PascalVOC中的图像较为简单，大多数图像包含一到两个前景类别。为了生成非独立同分布（non-IID）数据分区，我们将其划分为20个子集，每个子集对应一个前景类别。一个子集的背景不包含其他语义类别。&lt;/li>
&lt;li>**ADE20k **：这是一个大规模的语义分割数据集，包含20,210张图像和150个语义类别。语义类别的分布呈长尾分布。为了生成非独立同分布数据分区，我们逐渐将尾部类别拆分为子集，最终生成150个子集。频繁类别的子集不包含尾部类别。一个子集的背景不包含其他类别。&lt;/li>
&lt;/ul>
&lt;p>作者采用了两种常用的语义分割评估指标：&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>mIoU（mean Intersection-over-Union）&lt;/strong>：表示预测像素与真实像素之间的交并比，平均到所有类别上。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Pixel Accuracy&lt;/strong>：表示正确分类的像素比例。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h4 id="42-消融实验和对比实验">4.2 消融实验和对比实验&lt;/h4>
&lt;center>表1 - 消融实验和对比实验&lt;/center>
&lt;img src="文献阅读报告.assets/image-20240606190014209.png" alt="image-20240606190014209" style="zoom:50%;" />
&lt;p>这张表包含两部分a和b，其中a进行了消融实验，证明了fedseg各个部分的有效性，b进行了对比实验，讲fedseg和目前最先进的方法做对比证明fedseg的优越性。&lt;/p>
&lt;p>在表1（a）中，作者展示了FedSeg的主要组成的效果，即$L_{\text{backce}}$和$L_{\text{con}}$的有效性。我们使用FedAvg作为基础的FL框架。表中的FedAvg表示使用标准交叉熵损失的FedAvg方法。FedAvg+$L_{\text{backce}}$表示我们使用修改后的CE损失，而FedAvg + $L_{\text{backce}}+L_{\text{con}}$表示同时使用$L_{\text{backce}}$和$L_{\text{con}}$。我们进行了三次尝试并报告了平均值。实验证明了：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>$L_{backce}$的有效性&lt;/strong>: 表1(a)显示了背景聚合CE损失相比于标准CE损失显著提高了分割性能。这表明背景聚合的优化校正对于类别异构的FL语义分割非常重要。对于Cityscapes、CamVID和PascalVOC，$L_{\text{backce}}$将mIoU提高了20%以上。对于困难的大规模ADE20k，$L_{\text{backce}}$也有1.4%的mIoU改善。&lt;/li>
&lt;li>&lt;strong>$L_{con}$的有效性&lt;/strong>: 表1(a)显示添加$L_{\text{con}}$可以将Cityscapes和CamVID的mIoU提高2.5%到5.2%，证明了$L_{\text{con}}$的有效性。对于PascalVOC，$L_{\text{con}}$的有效性有限。这是因为对比损失需要足够的负样本才能获得良好的性能。然而，PascalVOC是一个简单的数据集，每个客户端只包含一个或两个类别，即负类相当有限，$L_{\text{con}}$起作用。对于困难的大规模ADE20k，mIoU略有提高0.3%。&lt;/li>
&lt;/ul>
&lt;p>作者在表1(b)中将FedSeg与其他FL方法进行了比较，包括FedAvg 、FedProx 、FedDyn 和MOON 。为了公平比较，它们都在局部更新中使用了$L_{\text{backce}}$，因为$L_{\text{backce}}$可以被视为一个强大的基准线。表1(b)显示了先前用于非IID问题的FL方法（FedProx 、FedDyn 、MOON ）的分割性能与FedAvg 相似甚至更低。这表明，对于密集预测任务，整个模型权重或表示的粗略正则化效果不佳。作者的FedSeg采用了细粒度的像素级对比学习，并有效地提高了mIoU分数。&lt;/p>
&lt;h4 id="43-iid数据集实验和loss对比">4.3 IID数据集实验和LOSS对比&lt;/h4>
&lt;center>表2 - IID数据集实验&lt;/center>
&lt;img src="文献阅读报告.assets/image-20240606191402078.png" alt="image-20240606191402078" style="zoom:50%;" />
&lt;p>作者在表2中报告了FedSeg在IID分布设置下的性能，该设置随机将图像拆分到不同的客户端。结果显示，使用$L_{\text{backce}}$与标准CE损失取得了类似的性能。这是因为$L_{\text{backce}}$旨在纠正优化并解决非IID问题。由于在IID情况下，每个客户端都包含所有类别，因此$L_{\text{backce}}$和标准CE损失（$L_{\text{ce}}$）之间的梯度更新是相似的。添加$L_{\text{con}}$后，性能有所提高，因为它学习了更好的像素嵌入空间。&lt;/p>
&lt;center>表3 - 不同的LOSS对比&lt;/center>
&lt;img src="文献阅读报告.assets/image-20240606191718087.png" alt="image-20240606191718087" style="zoom:50%;" />
&lt;p>作者进一步将$L_{\text{backce}}$与常用的语义分割损失进行了比较，包括BCELoss、DiceLoss 和Lova´szLoss 。这些语义分割损失只对前景类别的logits进行梯度计算，从而缓解了FL分割的优化分歧问题。如表3所示，这些结构感知的优化准则的分割性能优于标准CE损失。相比这些损失，我们提出的$L_{\text{backce}}$进一步提高了分割性能，表明$L_{\text{backce}}$在优化方向上更接近于集中训练。具体来说，$L_{\text{backce}}$在Cityscapes（non-IID1）和CamVID（non-IID1）上分别超过了最佳竞争对手DiceLoss 15.7%和16.3%。在PascalVOC上，$L_{\text{backce}}$的提升不如其他数据集显著。这是因为$L_{\text{backce}}$解决了背景不一致的问题，更适用于客户端背景包含其他客户端类别的情况。然而，对于PascalVOC，每个客户端并不包含其他客户端的类别。&lt;/p>
&lt;center>表4 - 本地到全局和本地到本地的对比损失比较&lt;/center>
&lt;img src="文献阅读报告.assets/image-20240606192006278.png" alt="image-20240606192006278" style="zoom:50%;" />
&lt;center>表5 - 像素到像素和像素到区域的对比损失&lt;/center>
&lt;img src="文献阅读报告.assets/image-20240606192015186.png" alt="image-20240606192015186" style="zoom:50%;" />
&lt;p>表4和表5展示了不同对比损失的效果，基于上述实验现象，作者选取了本地到全局，像素到区域的对比学习损失。&lt;/p>
&lt;h4 id="44-fedseg效果">4.4 FedSeg效果&lt;/h4>
&lt;img src="文献阅读报告.assets/image-20240606194734705.png" alt="image-20240606194734705" style="zoom:50%;" />
&lt;center>图5 - Cityscapes和CamVID的通信效率比较&lt;/center>
&lt;p>图5显示了训练过程中每轮的mIoU分数，由于作者的FedSeg增加了局部到全局的对比损失，以进行细粒度的局部更新校正，从而持续提高了分割性能和通信效率。如图5所示，在Cityscapes（non-IID1和non-IID2）和CamVID（non-IID1和non-IID2）数据集上，FedSeg在开始阶段的mIoU提升速度显著快于FedAvg。&lt;/p>
&lt;img src="文献阅读报告.assets/image-20240606195122324.png" alt="image-20240606195122324" style="zoom:50%;" />
&lt;center>图6 - 不同语义类的像素嵌入的可视化&lt;/center>
&lt;p>作者使用t-SNE 对Cityscapes验证数据集中的语义类别像素嵌入进行可视化，如图6所示。作者比较了FedAvg（使用标准CE损失）、FedAvg + $L_{\text{backce}}$和FedAvg + $L_{\text{backce}} + L_{\text{con}}$。图6显示，使用标准CE损失训练的模型学习到的嵌入效果较差，不同语义类别的像素嵌入甚至混杂在一起。使用背景聚合CE损失可以学习到更好的像素嵌入。添加像素对比学习进一步改善了嵌入空间中不同类别的分离度。&lt;/p>
&lt;p>从通信效率和最终像素嵌入的可视化来看，FedSeg相对于其他的FL算法，展现出了很好的优越性，通过像素嵌入的可视化，也能看出作者提出的两处修改也确实起到了作用。&lt;/p>
&lt;h4 id="45-clients的影响">4.5 clients的影响&lt;/h4>
&lt;img src="文献阅读报告.assets/image-20240606195807699.png" alt="image-20240606195807699" style="zoom:50%;" />
&lt;center>图6 - non-IID数据下参与客户端数量的影响&lt;/center>
&lt;p>图6为不同参与客户端的数量对mIoU的影像图。作者评估了不同数量的参与客户端对FedSeg的影响。具体来说，作者随机选择了5、10、15、20个客户端参与每轮的联邦学习。如图7所示，随着客户端数量的增加，使用标准CE损失的FedAvg 的mIoU性能显著提高，因为每轮参与的更多客户端提供了更多数据，缓解了客户端偏移问题。在图7中，随着客户端数量的增加，FedSeg的性能也略有提升。并且不论在client为多少的情况下， FedAvg + $L_{\text{backce}} + L_{\text{con}}$ 的表现总是最好的。&lt;/p>
&lt;h3 id="5-代码复现">5. 代码复现&lt;/h3>
&lt;img src="文献阅读报告.assets/image-20240606200641454.png" alt="image-20240606200641454" style="zoom:50%;" />
&lt;center>图7 - 代码复现-客户端总数60-每次参与5&lt;/center>
&lt;p>从github中将代码clone到本地仓库，更改配置文件中的参与客户端总数和每次参与客户端的数量&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 随时输出log: cityscapes&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">date_now&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="k">$(&lt;/span>date +&lt;span class="s2">&amp;#34;%Y%m%d_%H%M%S&amp;#34;&lt;/span>&lt;span class="k">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">#python=../envs/torch11/bin/python&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">#ROOT_DIR=&amp;#39;../data/cityscapes&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">#ROOT_DIR=&amp;#39;../data/cityscapes_split_erase19&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">#ROOT_DIR=&amp;#39;../data/cityscapes_split_erase19C2&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">ROOT_DIR&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;/root/workspace/voc&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">#ROOT_DIR=&amp;#39;../data/ade20k_erase_150C1&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">LABEL_ONLINE_GEN&lt;/span>&lt;span class="o">=&lt;/span>False
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">LOSSTYPE&lt;/span>&lt;span class="o">=&lt;/span>back &lt;span class="c1">#ce,ohem,back,&amp;#39;dice&amp;#39;,&amp;#39;focal&amp;#39;,&amp;#39;lovasz&amp;#39;,&amp;#39;bce&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">WARMSTEP&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">20&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">FRAC_NUM&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">5&lt;/span> &lt;span class="c1"># 每次参与的客户端数量&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">LOCAL_EP&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">MIXLABLE&lt;/span>&lt;span class="o">=&lt;/span>True
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">FEDPROX_MU&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">##################&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">DISTILL&lt;/span>&lt;span class="o">=&lt;/span>False
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">TEMP_DIST&lt;/span>&lt;span class="o">=&lt;/span>0.1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">LAMB_PI&lt;/span>&lt;span class="o">=&lt;/span>0.1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">LAMB_PA&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">##################&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">RAND_INIT&lt;/span>&lt;span class="o">=&lt;/span>False
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">##################PROTO_NEW&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">IS_PROTO&lt;/span>&lt;span class="o">=&lt;/span>True
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">MOM_UPDATE&lt;/span>&lt;span class="o">=&lt;/span>False
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">GLOBALEMA&lt;/span>&lt;span class="o">=&lt;/span>False
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">PROTO_START_EPOCH&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">CON_LAMB&lt;/span>&lt;span class="o">=&lt;/span>0.1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">MOMENTUM&lt;/span>&lt;span class="o">=&lt;/span>0.99
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">TEMP&lt;/span>&lt;span class="o">=&lt;/span>0.07
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">EPOCH_NUM&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">300&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">MAX_ANCHOR&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">4096&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">KMEAN_NUM&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">PSEUDO_LABLE&lt;/span>&lt;span class="o">=&lt;/span>True
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">PSEUDO_LABEL_START_EPOCH&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">LOCALMEM&lt;/span>&lt;span class="o">=&lt;/span>True
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">CON_LAMB_LOCAL&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">##################&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">DATASET&lt;/span>&lt;span class="o">=&lt;/span>voc &lt;span class="c1">#cityscapes #ade20k #camvid&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">NUM_CLS&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">20&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">NUM_USERS&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">60&lt;/span> &lt;span class="c1"># 总共多少个客户端&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">python -u segmentation/federated_main.py &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--gpu&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;0&amp;#34;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--dataset&lt;span class="o">=&lt;/span>&lt;span class="nv">$DATASET&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--root_dir&lt;span class="o">=&lt;/span>&lt;span class="nv">$ROOT_DIR&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--USE_ERASE_DATA&lt;span class="o">=&lt;/span>True &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--num_classes&lt;span class="o">=&lt;/span>&lt;span class="nv">$NUM_CLS&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--data&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;train&amp;#34;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--num_workers&lt;span class="o">=&lt;/span>&lt;span class="m">4&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--model&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;bisenetv2&amp;#34;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--checkpoint&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--lr&lt;span class="o">=&lt;/span>0.05 &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--lr_scheduler&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;step&amp;#34;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--iid&lt;span class="o">=&lt;/span>False &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--num_users&lt;span class="o">=&lt;/span>&lt;span class="nv">$NUM_USERS&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--frac_num&lt;span class="o">=&lt;/span>&lt;span class="nv">$FRAC_NUM&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--epochs&lt;span class="o">=&lt;/span>&lt;span class="nv">$EPOCH_NUM&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--local_ep&lt;span class="o">=&lt;/span>&lt;span class="nv">$LOCAL_EP&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--local_bs&lt;span class="o">=&lt;/span>&lt;span class="m">8&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--is_proto&lt;span class="o">=&lt;/span>&lt;span class="nv">$IS_PROTO&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--losstype&lt;span class="o">=&lt;/span>&lt;span class="nv">$LOSSTYPE&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--fedprox_mu&lt;span class="o">=&lt;/span>&lt;span class="nv">$FEDPROX_MU&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--label_online_gen&lt;span class="o">=&lt;/span>&lt;span class="nv">$LABEL_ONLINE_GEN&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--distill&lt;span class="o">=&lt;/span>&lt;span class="nv">$DISTILL&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--distill_lamb_pi&lt;span class="o">=&lt;/span>&lt;span class="nv">$LAMB_PI&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--distill_lamb_pa&lt;span class="o">=&lt;/span>&lt;span class="nv">$LAMB_PA&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--rand_init&lt;span class="o">=&lt;/span>&lt;span class="nv">$RAND_INIT&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--warmstep&lt;span class="o">=&lt;/span>&lt;span class="nv">$WARMSTEP&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--globalema&lt;span class="o">=&lt;/span>&lt;span class="nv">$GLOBALEMA&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--temp_dist&lt;span class="o">=&lt;/span>&lt;span class="nv">$TEMP_DIST&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--mixlabel&lt;span class="o">=&lt;/span>&lt;span class="nv">$MIXLABLE&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--proto_start_epoch&lt;span class="o">=&lt;/span>&lt;span class="nv">$PROTO_START_EPOCH&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--con_lamb&lt;span class="o">=&lt;/span>&lt;span class="nv">$CON_LAMB&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--con_lamb_local&lt;span class="o">=&lt;/span>&lt;span class="nv">$CON_LAMB_LOCAL&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--momentum&lt;span class="o">=&lt;/span>&lt;span class="nv">$MOMENTUM&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--temperature&lt;span class="o">=&lt;/span>&lt;span class="nv">$TEMP&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--max_anchor&lt;span class="o">=&lt;/span>&lt;span class="nv">$MAX_ANCHOR&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--kmean_num&lt;span class="o">=&lt;/span>&lt;span class="nv">$KMEAN_NUM&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--pseudo_label&lt;span class="o">=&lt;/span>&lt;span class="nv">$PSEUDO_LABLE&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--pseudo_label_start_epoch&lt;span class="o">=&lt;/span>&lt;span class="nv">$PSEUDO_LABEL_START_EPOCH&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--localmem&lt;span class="o">=&lt;/span>&lt;span class="nv">$LOCALMEM&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--mom_update&lt;span class="o">=&lt;/span>&lt;span class="nv">$MOM_UPDATE&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--save_frequency&lt;span class="o">=&lt;/span>&lt;span class="m">20&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--local_test_frequency&lt;span class="o">=&lt;/span>&lt;span class="m">9999&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--global_test_frequency&lt;span class="o">=&lt;/span>&lt;span class="m">20&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--USE_WANDB&lt;span class="o">=&lt;/span>&lt;span class="m">0&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--date_now&lt;span class="o">=&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">date_now&lt;/span>&lt;span class="si">}&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>&lt;span class="p">|&lt;/span> tee -a &lt;span class="s2">&amp;#34;save/logs/log-&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">date_now&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">.txt&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>修改&lt;code>FRAC_NUM&lt;/code>和&lt;code>NUM_USERS&lt;/code>，设置通信轮次分别为150，250和300，可以看到，FedSeg可以在较少的通信轮次中达到较低的损失。&lt;/p>
&lt;h3 id="6-论文总结">6. 论文总结&lt;/h3>
&lt;p>作者研究了用于语义分割的类别异构联邦学习。为了解决局部更新过程中前景-背景不一致和客户端漂移的问题，提出了一种基准方法FedSeg，使用了修改后的CE损失和局部到全局的像素对比损失。在四个语义分割数据集上进行了大量实验，以展示FedSeg的有效性。&lt;/p>
&lt;h3 id="7-学习心得">7. 学习心得&lt;/h3>
&lt;p>通过阅读《FedSeg: Class-Heterogeneous Federated Learning for Semantic Segmentation》这篇文章，我学习到了机器学习领域中关于联邦学习和语义分割的前沿知识，加深了我对分布式机器学习系统的理解，在学习FedSeg这篇文章的时候，由于FedSeg采用了FedAvg作为基本的FL框架，我还去阅读了《Communication-Efficient Learning of Deep Networks from Decentralized Data》这篇文章，了解了FedAvg的基本原理和其用于机器学习的效果，汇报中的ppt和本文章中的FedAvg相关的图是从这篇文章中截取的，这篇文章让我了解到了在机器学习领域也可以使用分布式系统，并且对其基本问题给出了基本的解决方案。除此之外，我还掌握了一些关键的技术和方法。具体来说：&lt;/p>
&lt;p>&lt;strong>学习到了联邦学习的基本概念和挑战&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>理解到了联邦学习的基本方法例如Fedavg等。&lt;/li>
&lt;li>联邦学习的目标是在保护数据隐私的前提下，通过多个分布式客户端协作训练一个全局模型。&lt;/li>
&lt;li>立即到了联邦学习和传统机器学习的异同之处，通过进行实际的代码复现进一步加深了对语义分割任务和联邦学习对传统机器学习的优化的理解。&lt;/li>
&lt;li>理解了Non-IID数据（数据分布不均匀）对模型训练的影响，特别是在类异构的场景下，不同客户端的数据包含不同的语义类别，导致训练过程中出现的前景-背景不一致问题。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>加深了对语义分割任务的认识&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>语义分割是一种密集预测任务，需要对图像中的每个像素进行分类，应用广泛但挑战较大。&lt;/li>
&lt;li>语义分割的模型训练需要像素级的标签数据，这种数据很难被获取到，并且在进行和做训练的时候需要进行用户隐私的保护。&lt;/li>
&lt;li>通过本论文，我了解了现有的语义分割方法以及它们在联邦学习场景下的局限性。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>掌握了改进联邦学习的方法和技术&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>修改的交叉熵损失 ($ L_{backce} $)&lt;/strong>：通过调整损失函数来纠正本地优化方向，从而缓解由数据分布不均匀引起的优化问题。&lt;/li>
&lt;li>&lt;strong>像素级对比学习 ($L_{con}$)&lt;/strong>：通过局部到全局的对比学习方法，将本地像素嵌入逼近全局语义空间，提高了全局模型的收敛性和精度。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>掌握了实验设计与评估技能&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>了解了如何设计实验来验证方法的有效性，包括选择合适的数据集、设定对比实验、分析结果和绘制性能曲线。&lt;/li>
&lt;li>学习并掌握了如何使用多种评估指标（如$mIoU$）来衡量模型在不同任务和数据集上的表现。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>进行了模型的部署和云服务器的应用&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>学会了如何将训练好的模型部署到云服务器上，通过云服务器解决本地配置不足的问题。&lt;/li>
&lt;li>学习到了ssh连接云服务器的基本原理和过程，和它的具体使用方法。&lt;/li>
&lt;li>熟悉了centos的基本环境和操作指令。&lt;/li>
&lt;li>掌握了在云环境中配置和管理服务器的技能，包括服务器的启动与停止、文件权限的设置等。&lt;/li>
&lt;li>理解了如何优化模型的部署，提高服务的效率和稳定性，确保模型在实际应用中的有效性和可靠性。&lt;/li>
&lt;/ul>
&lt;p>总之，这篇文章不仅拓宽了我在机器学习和计算机视觉领域的知识面，还提供了一些实用的方法和技术，帮助我掌握了应对实际问题的技能。同时，通过模型的部署和云服务器的应用实践，我进一步提升了自己的技术水平，能够将所学知识应用于未来的科研和实际工作中。&lt;/p></description></item></channel></rss>