【问题标题】:How to convert probability to angle degree in a head-pose estimation problem?如何在头部姿势估计问题中将概率转换为角度?
【发布时间】:2021-07-22 10:54:18
【问题描述】:

我重复使用其他人的代码以欧拉角进行头部姿势预测。作者训练了一个分类网络,返回三个角度的 bin 分类结果,即 yaw、roll、pitch。 bin 的数量是 66。它们以某种方式将概率转换为相应的角度,如从第 150 行写入到第 152 行 here。有人可以帮忙解释一下公式吗?

这些是上述文件中的相关代码行:

[56]  model = hopenet.Hopenet(torchvision.models.resnet.Bottleneck, [3, 4, 6, 3], 66) # a variant of ResNet50
[80]  idx_tensor = [idx for idx in xrange(66)]
[81]  idx_tensor = torch.FloatTensor(idx_tensor).cuda(gpu)
[144] yaw, pitch, roll = model(img)
[146] yaw_predicted = F.softmax(yaw)
[150] yaw_predicted = torch.sum(yaw_predicted.data[0] * idx_tensor) * 3 - 99

【问题讨论】:

    标签: python deep-learning neural-network pytorch loss-function


    【解决方案1】:

    如果我们查看training code 和作者的paper,*我们会看到损失函数是两个损失的总和:

    1. 原始模型输出(每个 bin 类别的概率向量):
    [144] yaw, pitch, roll = model(img)
    
    1. bin 预测的线性组合(预测的连续角度):
    [146] yaw_predicted = F.softmax(yaw)
    [150] yaw_predicted = torch.sum(yaw_predicted.data[0] * idx_tensor) * 3 - 99
    

    由于3 * softmax(label_weighted_sum(output)) - 99 是训练回归损失的最后一层(但不是模型forward 的一部分),因此必须将其应用于原始输出,以将其从 bin 概率向量转换为单角度预测。


    *

    3.2.多重损失方法

    之前所有使用卷积网络预测头部姿势的工作都使用均方误差损失直接回归所有三个欧拉角。我们注意到,这种方法无法在我们的大规模合成训练数据上取得最佳结果。

    我们建议使用三个单独的损失,每个角度一个。每个损失都是两个组件的组合:分箱姿势分类和回归组件。任何 可以使用骨干网络并通过三个预测角度的全连接层进行扩充。这三个全连接层共享网络之前的卷积层。

    这种方法背后的想法是,通过执行 bin 分类,我们使用非常稳定的 softmax 层和交叉熵,因此网络学会了以稳健的方式预测姿势的邻域。通过三个交叉熵损失,每个欧拉角一个,我们有三个反向传播到网络中的信号 这改善了学习。为了获得细粒度的预测,我们计算每个输出角度对分箱输出的期望。显示了详细的架构 在图 2 中。

    然后我们向网络添加回归损失,即均方误差损失,以改进细粒度预测。我们有三个最终损失,每个角度一个, 每个都是各自分类和回归损失的线性组合。我们在 4.4 节中改变了回归损失的权重,我们持有 分类损失常数为 1。每个欧拉角的最终损失如下:

    其中HMSE分别表示交叉熵和均方误差损失函数。

    【讨论】:

    • 感谢您发布答案。我明白为什么第 [150] 行中的 yaw_predicted 返回预测的偏航角。但是,[150]中的公式是任意的吗?
    • @Hiep 它与训练中使用的公式相同,因此在这个意义上不是任意的,但我想它是经过一些反复试验来选择的,以获得大多数“原始预测的加权总和”进入范围 [-90, 90] (作者在训练/评估中排除了角度超出此范围的图像)。如果将其作为模型本身的可微变换(而不是固定的任意线性组合)包含在内,则可以学习线性变换本身的权重,而不是手动调整。
    • 您能否提供“作者在训练/评估中排除角度超出此范围的图像”的行和文件?
    • @Hiep “请注意,由于我们的方法将角度分类在 ±99° 范围内,因此我们丢弃了角度超出此范围的图像。AFLW2000 的 2000 张图像中只有 31 张未使用。”跨度>
    猜你喜欢
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 2014-03-11
    • 2021-11-01
    • 2012-08-31
    • 2015-09-09
    • 2016-08-04
    相关资源
    最近更新 更多