题记:利用在线知识蒸馏的方法做人体姿态估计
知识点:
1 知识蒸馏:把多个模型的知识提炼给单个模型。广泛用于迁移学习和模型压缩中。
参考链接:知识蒸馏(Knowledge Distillation)简述(一) - 知乎 (zhihu.com)
目前有很多人体姿态估计的网络是基于Hourglass(HG)来实现的,FPD(CVPR 19')首先提出,利用传统的蒸馏(KD)方法,首先训一个8-stack HG作为teacher,选择一个4-stack HG作为student,然后进行KD。其原理示意图如下图(a)所示。为了获取一个高效的4-stack HG。采用静态预训练的8-stackHG中的two-stage方案。
(1). 第一步训练teacher,第二步训student,整体是一个two-stage的过程,较为繁琐。
(2). 如果要利用FPD训练一个8-stack HG的student,就需要找到一个比8-stack更高的model去作为teacher。堆叠更多的HG会存在性能收益递减,并且带来计算量直线上升。
(3). KD过程中同时使用MSE作为传统任务的监督loss和kd loss,训练时一个output同时针对两个target进行优化会带来明显的冲突。
所以本文提出了在线的只是蒸馏方法。主要有几个点:
1)提出了一个在线知识蒸馏的框架,以one-stage的形式来蒸馏姿态结构知识。
2)介绍了平衡版本的OKDHP和不平衡版本的OKDHP,它可以以不同的压缩速率定制目标网络。
知识蒸馏:将预训练好的重量级网络视作teacher模型,通过知识迁移,用一个轻量级的student网
络去掌握改知识。
OKDHP体系结构包括一个多分支网络作为主网络和一个用于在线构建教师的FAU模块。如图1b,c所示。
具体来说就是,如果要得到一个4-stack HG的网络,FPD的方式如(a)所示,先训练一个8-stack,然后进行KD。图(b),直接建立一个多分支网络(图中为3个分支),其中每个分支视为student,要得到一个4-stack HG,那么选择在前部share 2个stack(节约计算量),后面针对每一个branch,将剩下的2个stack HG独立出来,以保持多样性。三个分支产生的结果经过FAU进行综合,得到的综合热图再KD回每一个student分支。
FAU模块:Feature Aggregation Unit(特征聚合单元),特征聚集单元(FAU)学习结合来自T个分支的所有预测热图,建立一个强大的teacher模型。(用来对每个分支产生的结果进行一个带有weight的channel-wise的ensemble。即将每个heatmap按照生成的权重进行集成)。由于自然场景中存在的身体尺度变化问题,一个简单的转换块不能有效地捕获上下文表示,所以本文拓展出了7x7和avg pool来捕捉更大范围的信息,进而来生成对应每个分支产生的heatmap的weight。另外的1×1卷积主要作为降维方法来节省计算资源。