头部姿态估计:《Fine-Grained Head Pose Estimation Without Keypoints》

《Fine-Grained Head Pose Estimation Without Keypoints》
2018,Nataniel Ruiz Eunji Chong James M. Rehg. multi-loss

论文地址:https://arxiv.org/abs/1710.00925v2
代码链接:https://github.com/natanielruiz/deep-head-pose
1.引言:
本文提出了一种简洁和鲁棒的方式来确定姿态,通过训练一个multi-loss的卷积神经网络。
直接使用RGB结合分类和回归损失来预测Euler angles(yaw,pitch and roll)。

2.网络结构:

å¨è¿éæå¥å¾çæè¿°

本文提出使用3个分离的losses,为每一个角度。每个loss由两部分组成:a binned pose classification and a regression component 组成。

最后为每一个欧拉角的损失为:

å¨è¿éæå¥å¾çæè¿°

实现细节:
1) 对欧拉角(Yaw,Pitch,Roll)按角度区间进行分类,比如3度,那么Yaw:-90-+90,可以分成180/3= 60个类别,Pitch和Roll同Yaw角类似。这样就可以进行分类任务了。
2) 对分类的结果恢复成实际的角度,类别*3-90,在和实际的角度计算回归损失。
3) 最后将回归损失和分类损失进行合并来得到最后的损失,回归损失的前面增加了一个权重系数α。

3.测试:
1)不同测试集的测试结果

å¨è¿éæå¥å¾çæè¿°

2)不同网络结构设置α参数的结果比较

å¨è¿éæå¥å¾çæè¿°

不同的网络结构需要自行去调节α进行训练。

4.小结:
使用分类和回归的方式进行约束,可以提升姿态估计的准确率。
但数据集构建比较麻烦。

5.部分参考代码:

伪代码:
# 类别数(yaw:60类)
idx_tensor1 = [idx for idx in xrange(60)]
idx_tensor1 = tf.convert_to_tensor(idx_tensor1,dtype=tf.float32)

# yaw角groundtruth获取
# continous labels
label_yaw_cont=ordinal_batch[:,0]
# binned labels				
label_yaw_bin=nominal_batch[:,0]

# 分类损失
# Cross entropy loss
loss_yaw_cl =tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits (labels=tf.cast(label_yaw_bin,tf.int64), logits=logits_nominal_yaw))

# 回归损失
# MSE loss
yaw_predict = tf.nn.softmax(logits_nominal_yaw)
logits_ordinal_yaw = tf.reduce_mean(yaw_predict*idx_tensor1,1)*3-90
loss_yaw_reg = tf.reduce_mean((logits_ordinal_yaw-label_yaw_cont)**2)

# 总损失	
#total loss
alpha=FLAGS.alpha
loss_yaw =tf.add_n([loss_yaw_cl,alpha * loss_yaw_reg])

 

 

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值