本文以复现论文《Fine-Grained Head Pose Estimation Without Keypoints》为例说明如何使用Tensorflow & Keras自定义 multi-loss 函数。
论文地址:
https://arxiv.org/abs/1710.00925
复现代码:
https://github.com/Oreobird/tf-keras-deep-head-pose
一、原理简述
论文提出了一种无需人脸关键点的人脸头部姿态估计算法,通过训练一个multi-loss的卷积神经网络,该网络结合了分类和回归两种目标函数来预测3个人脸头部姿态角度(yaw,pitch 和 roll),网络结构比较简单,以ResNet50作为主干网络提取特征,然后分别对3个角度进行分类和回归,属于多输出模型,结构如下图所示:
二、计算细节
(1)角度的分类定义
角度属于连续值,怎么转换为分类问题呢?作者使用了分箱的思想,将连续的角度值在[-99, 99]的范围内以 3 为间隔划分为66个区间,也就是66个类,如下图的例子,类别标签从0开始,-94度落在了第 1 类的范围内,所以分为第1类。