900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 头部姿态估计:《Fine-Grained Head Pose Estimation Without Keypoints》

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

时间:2024-02-18 22:34:14

相关推荐

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

《Fine-Grained Head Pose Estimation Without Keypoints》

,Nataniel Ruiz Eunji Chong James M. Rehg. multi-loss

代码链接:/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])

转自:

/u013841196/article/details/82949739

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。