字节跳动公司在arxiv上发的一篇文章,感觉还挺有意思的.
主要内容
针对多人关键点预测,目前主流的方法都是深度学习方法,而现有的深度学习方法离不开大规模数据集的支持. 多人关键点的数据集目前有COCO, MPII, Ai-Challenger, Posetrack等等,这些数据集的标注样式以及数据集来源都不一样. 目前的多人关键点模型在做训练的时候,常用的方法是现在某个数据集上先做初始化训练,然后在迁移到最终测试的数据集上做finetune. 但作者指出这样做会有问题:
- 模型在最后finetune的时候, 其实会丢失到模型一开始在另外的数据集上学习的信息, 这样会造成模型在最后学习到的就是在finetune的数据集上的信息,或者说大部分都是这部分信息,而对于一开始初始化的那个数据集信息模型保留的就十分少.
- 数据集有很多个, 那么具体哪个训练顺序是最好的呢? 是先在coco上训练,然后MPII上finetune, 还是先MPII训练, COCO上finetune再MPII finetune?这些其实都没有一个具体的说法,全靠尝试.
因此作者提出不要分开训练, 而是把所有的数据集统一到一起去训练. 作者提出了一个模型, 叫 Multi-Domain Pose Network (MDPN), 模型结构如下图所示:
模型最终会有一个Multi-domain Pose Predictions, 上图右侧就是. 三个输出公用一个backbone. 具体的训练策略是:
- 三个输出(coco, mpii, posetrack)都开始训练
- 在coco数据集上针对coco head进行finetune
- 固定backbone和coco head, 将mpii head及posetrack head的输出结合在一起,只对这两块进行finetune,得到最后的输出.
文章没有具体说明训练时如何处理训练数据,例如在第一步时,是将所有数据集混乱然后打上不同的标签(例如这个是coco的,这个是mpii的)单独走对应的head,还是将数据集标注统一了下,三个都走? 文章并没有很明确的提出, 不过思路很有意思, 对单个任务但有多个数据集的训练提供了一个新的思路.