ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

DRML(CVPR 2016)Pytorch复现

2022-07-01 08:00:31  阅读:157  来源: 互联网

标签:loss Log 标签 DRML CVPR Pytorch 复现 2016


参考

文献原文: Deep Region and Multi-label Learning for Facial Action Unit Detection

原文提供的代码:DRML

Pytorch版本参考代码:DRML_Pytorch

复现过程参考: DRML复现

代码结构组织设计参考: ME-GraphAU

实验设定

数据集:

名字:DISFA+.

简介:一共有九个人的面部数据。每张图有12个AUs,每个AU的值在于[0, 5]的整数表示其强度。 取前面七个同时作为训练集和验证集,最后两个人的数据作为测试集。

训练集的数量:42929 

测试集的数量:14739 

标签:{-1, 1}, 所有AU值小于2的为-1, 剩下的标签为1

超参数和参数:

optimizer:SGD

learning rate:0.001

weigth decay:0.005

momentum:0.9

epoch:20

batch size:64

代码

待续,等我弄完了发

踩坑记录

 DRML的文献中使用的是该文作者自己设计的叫做multi-label sigmoid cross-entropy loss。其具体定义为以下:

其中y是真实的标签, ŷ是预测的标签。C是AUs的总数,N是总样本数量。

文中说有三个标签{-1, 0, 1}, 然后根据loss的理解,作为标签为0的数据其实跟loss无关。loss只关注标签为1和-1的样本。 

另外我最开始理解错了loss, 我以为是 {1*[y > 0] * Log ŷ + (-1)*[y<0] * Log(1 -  ŷ)}, 通过该方法作为loss计算,我发现每个epoch的验证结果都是一模一样的,而且loss根本就没有收敛,一直在一个范围内来回摇摆。正确理解的是 {[y > 0]*Log ŷ +[y<0]* Log(1 -  ŷ)}, [y > 0] 和[y < 0]要么返回1要么返回0. 

还有一个就是计算 Log的时候要小心里面的值不要等于0或是小于0. 由于是sigmoid处理之后的值,所有输出值得范围是介于0和1之间。因此把所有输出等于0的值变成1e-20可以避免在原本的计算中梯度炸掉的坑。 

标签:loss,Log,标签,DRML,CVPR,Pytorch,复现,2016
来源: https://www.cnblogs.com/xbkyj/p/16433259.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有