[Human Parsing] SCHP
SCHP
出发点:ground-truth中可能存在错误,影响训练。使用迭代优化的过程,不断同时提升labels和models
方法详细介绍:
开始给一个训练集,有图片\(\mathcal{X}\)和不怎么精确的掩码\(\mathcal{Y}\)
目标是训练一个parser,通过模型聚合(model aggregation)、标签提升(label refinement)、模型交互(interaction)。首先根据不怎么精确的标注对模型进行warm-up initialization,然后对模型和掩码标注进行交替优化。
循环地聚合学习到的模型,以移动平均的方式细化掩码注释\(\mathcal{Y}\)。具体来说,在某一个循环中,首先让模型从上一个被优化过的掩码中进行学习,然后通过参数化移动平均的操作把当前周期中学习到的模型权重和上一周期的模型权重进行聚合,然后用聚合后的模型来推断掩码,再通过像素移动平均操作来校正标注中的噪声,提升后的掩码标注将作为下一轮的ground-truth。
对每一个部分进行详细介绍:
Warm-up Initialization
挺重要的
Online Model Aggregation
把不同周期得到的模型记为\(\{\theta_i\}_{i=1}^N\) 设\(\theta\)是在第\(i\)轮学到的模型,上一轮使用的模型是\(\theta_{i-1}\),那么我们可以用移动平均的方式得到第\(i\)轮使用的模型: \[ \theta_i=\frac{i}{i+1}\theta_{i-1}+\frac{1}{i+1}\theta \] 然而实验发现直接这样可能让模型表现更差,那是因为BN层在模型聚合之后参数不准确了,为了弥补这一点
we forward all the training samples for one epoch to exactly re-estimate the BatchNorm statistics in all BN layers as follows:
\[ m = (t-1)/t \\ \mu_t = m\mu_{t-1}+(1-m)E[x_B] \\ \sigma_t^2 = m \sigma_{t-1}^2+(1-m)Var[x_B] \]
其中\(t\)是循环的次数,\(x_B\)是BN层的输入特征。
看起来很复杂,实际上基本没有增加复杂度。
Online Label Refinement
把不同训练周期中得到的预测标签集表示为\(\{\mathcal{Y_i}\}_{i=1}^n\) 跟先前类似: \[ \mathcal{Y_i} = \frac{i}{i+1}\mathcal{Y_{i-1}}+\frac{1}{i+1}\mathcal{Y} \]
Cyclical Training Strategy
为了满足在结束的时候有较小的学习率,在每一周期开始时有较大的学习率来走出局部极值,使用循环重启的余弦退火学习速率调度算法,设\(T\)是每一个循环有的epochs数目,\(\eta_{min}, \eta_{max}\)表示结束、开始时的学习率
则: \[ \eta = \eta_{min}+\frac{1}{2}(\eta_{max}-\eta_{min})(1+\cos(\frac{T_{cur}}{T}\pi)) \]
伪代码: