Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于为什么要用Auxiliary net的问题 #24

Closed
wx19941204 opened this issue Dec 30, 2020 · 8 comments
Closed

关于为什么要用Auxiliary net的问题 #24

wx19941204 opened this issue Dec 30, 2020 · 8 comments

Comments

@wx19941204
Copy link

论文中有这样一段描述:
One may wonder that given predicted and ground-truth
landmarks, why not directly compute the Euler angles from
them? Technically, it is feasible. However, the landmark
prediction may be too inaccurate especially at the beginning
of training, which consequently results in a low-quality estimation of the angles. This could drag the training into
dilemmas, like over-penalization and slow convergence. To
decouple the estimation of rotation information from landmark localization, we bring the auxiliary subnet.
这里只解释了为什么不能用训练得到的landmarks去计算Eular角,但为什么不能直接用标注数据去计算Eular角呢?(用本身的标注数据去计算Eular角不会更准确吗?)

@github-luffy
Copy link
Owner

论文中有这样一段描述:
One may wonder that given predicted and ground-truth
landmarks, why not directly compute the Euler angles from
them? Technically, it is feasible. However, the landmark
prediction may be too inaccurate especially at the beginning
of training, which consequently results in a low-quality estimation of the angles. This could drag the training into
dilemmas, like over-penalization and slow convergence. To
decouple the estimation of rotation information from landmark localization, we bring the auxiliary subnet.
这里只解释了为什么不能用训练得到的landmarks去计算Eular角,但为什么不能直接用标注数据去计算Eular角呢?(用本身的标注数据去计算Eular角不会更准确吗?)

题主说的方法也是可以的,但是论文表示该子网络的输入并不是训练数据,而是PFLD主网络的中间输出,可见该网络的目的是监督和辅助训练收敛,在一定程度上是可以提升模型性能的。而且辅助网络在训练中用到,测试过程是不需要的,因此不必考虑模型速度受此影响。

@wx19941204
Copy link
Author

在仔细读了论文和代码之后我发现我之前理解错了,但是现在对于这个损失函数的设计还有点疑问:
image
把Eular角加入到损失函数的计算中是为了平衡数据,也就是让姿态偏差较大(与正脸比较)的前脸图片所占的损失更大。那么为什么要用 AuxiliaryNet预测的Eular角 与 通过真实标注得到的Eular角 之差去计算这个权重,而不是直接用 通过真实标注得到的Eular角 去计算这个权重呢?
我觉得如果是为了增大姿态偏差较大的样本所计算出的损失函数,应该直接用 这个样本计算出的Eular角 去扩大权重,而不用加上 AuxiliaryNet预测的Eular角。

@github-luffy
Copy link
Owner

在仔细读了论文和代码之后我发现我之前理解错了,但是现在对于这个损失函数的设计还有点疑问:
image
把Eular角加入到损失函数的计算中是为了平衡数据,也就是让姿态偏差较大(与正脸比较)的前脸图片所占的损失更大。那么为什么要用 AuxiliaryNet预测的Eular角 与 通过真实标注得到的Eular角 之差去计算这个权重,而不是直接用 通过真实标注得到的Eular角 去计算这个权重呢?
我觉得如果是为了增大姿态偏差较大的样本所计算出的损失函数,应该直接用 这个样本计算出的Eular角 去扩大权重,而不用加上 AuxiliaryNet预测的Eular角。

个人理解:假设用通过真实标注得到的Eular角 去计算这个权重,那么模型一开始就会去偏向学习姿态偏差较大的图片,学习这些偏差较大的图片可能会导致模型难以收敛(毕竟模型可能会学习不到去表示这些困难样本的特征,除非增大样本集),正脸图片可能就会来不及去学习了;而通过 AuxiliaryNet预测的Eular角 与 通过真实标注得到的Eular角 之差去计算这个权重,模型是会慢慢学习所有的样本,随着偏差角的增加,模型会增加对姿态偏差较大的图片的惩罚,这样就促进了模型的收敛程度,提升了模型的性能。

@wx19941204
Copy link
Author

我大概理解了,之后有机会会尝试一下直接用 通过真实标注得到的Eular角 去计算权重。
感谢解答~~

@barbel-bb
Copy link

我想你们两个都理解错了,作者在论文中提到的这三个角度是真实值和预测值的偏差值。真实值就是用标注算的,预测是用辅助网络算的,他两差别越大,越需要加重训练。不是人脸越斜越加重训练。否则正脸loss都直接是0了,还学什么。我认为辅助网络一方面是一个新的辅助任务,学人脸姿态来提升关键点的性能。另外一方面因为辅助任务和主线任务都受到姿态分布不均的影响,用辅助任务的loss来加权主线任务的权重,代表了其实际学习的难易程度。

@wx19941204
Copy link
Author

你是对的,不过有没有思考过为什么不能直接用网络预测的特征点去计算人脸欧拉角呢?

@github-luffy
Copy link
Owner

我想你们两个都理解错了,作者在论文中提到的这三个角度是真实值和预测值的偏差值。真实值就是用标注算的,预测是用辅助网络算的,他两差别越大,越需要加重训练。不是人脸越斜越加重训练。否则正脸loss都直接是0了,还学什么。我认为辅助网络一方面是一个新的辅助任务,学人脸姿态来提升关键点的性能。另外一方面因为辅助任务和主线任务都受到姿态分布不均的影响,用辅助任务的loss来加权主线任务的权重,代表了其实际学习的难易程度。

这样理解更加正确

@barbel-bb
Copy link

用预测的关键点,作者说会在初期效果很差。我理解初期的关键点很随机,可能根本就算不出角度。比如预测的点全部共线,程序直接报错推出。或者都是些极端大的值没有实际的意义。 但为什么会over-penalization and slow convergence,可能你训练的时候试试能分析出原因,我还没想清楚。感觉作者也没有深究。另外作者用了decouple 这个词,很多网络设计会用到这个概念,解耦之后会更灵活,但为什么也不是很清楚。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants