DRML(2016-CVPR)重现过程记录---(9)问题解决与最终结果

来源:互联网 发布:查询树形 mysql 编辑:程序博客网 时间:2024/05/29 13:48

之前谈到的现象是单个AU用lmdb和softmax可以正常训练,而采用了multi-label数据输入和multi-sigmoid loss函数层却不能正常训练,后来张君鹏帮我检查,发现是因为输入的数据没有shuffle。后来我发现这个错误刘琳学姐也犯了,大概新入门caffe的人在第一次修改输入层时可能容易犯这个错误。因为一般我们用lmdb时会在命令中添加shuffle,但是新的层一般是不会自动设计这个shuffle的,所以需要人为打乱输入再送进神经网络中去。


打乱输入数据之后,处理了BP4D和DISFA数据集,就可以训练测试多个AU了。下面是结果

 

上面是DISFA数据集在DRML上的测试结果


上面是 DISFA数据集在AlexNet, ConvNet, DRML上的结果对比



上面是DISFA在DRML上的ROC曲线和AUC值


上面的图是BP4D数据集在DRML, ConvNet, AlexNet下的训练loss曲线


上面的图片是BP4D 数据集在DRML训练模型的ROC曲线


上面是BP4D数据集结果与文章的对比(f1-score


上面是BP4D数据集结果与文章的对比(AUC)


结论与分析

根据DISFA数据集在DRML上的测试结果,其中第一行中的(p/n)(p/n)分别代表ground truth和实验出来AU是否存在,在最后两列求得正负样本比,为0的情况代表负样本数目是正样本数目的10倍及以上,这种情况认为该AU训练无效。所以我们只需要观察样本比非0的这些AU。显然正负样本数目最接近的AU12与AU25是表现最好的,说明正负样本比对神经网络训练影响比较大。而AU26,AU4,AU6,相对来说学习得不是很成功。

看DISFA数据集在DRML上ROC曲线分析,也是AU12和AU25学习得最好,这里有一个有趣的现象,就是AU4和AU6的正负样本比差不多,而AU4的学习效果却比AU6差很多呢?这就要从他们的本质说起了。AU4代表的含义是皱眉头,这个AU一般跟负面情绪有关,AU6代表的是脸颊提升,AU6通常会与AU12同时出现。AU6比AU4好检测的原因有两个:一,AU6的动作幅度较大,脸颊提升造成的脸部变化远比皱眉造成的脸部变化要大;二,AU6与AU12具有强烈的相关性,而AU12嘴角提升这种明显的变化十分容易检测到,两者又一般同时出现,这个强烈的相关性会直接提升AU6的检测性能。


看DISFA数据集在DRML、ConvNet、AlexNet上的结果对比。以AU12为例,仔细观察可以发现,DRML和ConvNet的结果比AlexNet好,说明之前提出的去掉pooling层是有意义的,但是ConvNet和DRML的区别不是很明显,有时候ConvNet比DRML稍微好一点,有时候DRML比ConvNet稍微好一点,都差不太多,这里还不好判断region层是否真的有用。


我们再来看一下BP4D数据集的实验结果。

根据DRML、AlexNet、ConvNet的训练曲线,仅仅看这个曲线只能发现AlexNet是收敛最好最快的。然后让我们看看具体的模型测试结果。

看数据集在DRML训练模型的ROC曲线。根据这个ROC曲线可以看到,同样的,不同的AU训练出来的效果是不一样的,AU6和AU12训练的结果十分好看,这里会发现AU10的结果也很好,这是因为AU10的样本量是最多的。


最后俩表格分别是BP4D数据集的结果和文章中给出的结果数据对比。首先,我们的训练结果要整体比文章给出的结果高很多,这里我估计最重要的原因是我们的train\val\test的选取不一样造成的。其次,不管是我们的实验中,还是文章中,DRML确实比ConvNet得到的效果好一些,虽然高得不是很多。


总的来说,结论是有region层的DRML的确比没有region层的ConvNet结果好,所以region的设计应该是有意义的;而我的结果比作者文章的好看,究其原因应该是因为我在选取数据集时严格控制了样本比例,我这里设置选择BP4D所有正样本,对应负样本数目不得高于正样本数目的两倍,train\val\test都是这么做的,所以结果比作者的好看。


至此,DRML的重现工作已基本完成。感谢作者Kaili Zhao的远程答疑,以及小学弟张君鹏的各种帮忙~

阅读全文
0 0
原创粉丝点击