rPPG模型准确率低&难以收敛

情况简介

最近在搭建一个基于神经网络( two-stream Convnet)的framework, 可以从包含人脸的video里提取出此人对应的生理数据,例如心率和呼吸率。这个远程监控功能在许多方面都有应用,比如用于驾驶辅助系统,来监控驾驶员的身体及情绪状况等。
在搭建完模型开始训练的过程中,模型难以收敛,最终的预测效果也很不理想。分析了一下问题,计划从以下几个角度入手调试模型,并清理数据。

可能的问题及解决方案

数据集预处理的问题

1.问题 :观察模型输出,发现output 均为负数。通过查看labels分布发现,负类样本数目为正类的两倍。
解决方案:可以手动oversampling来增大正类样本的占比。
隐患:也许真实分布中,负类出现的概率就是远远大于正类。这样一来,人为上调正类的占比也许会破坏最终结果。

2.问题 :模型的预测准确率一直在random徘徊,表明模型根本没有学习。猜测或者是数据存在问题导致模型无法学到规律,或者是模型搭建有bug。
解决方案:首先,用经典的MNIST数据集来train这个模型,完成Handwritten Digit Recognition的任务,来检测模型搭建有无问题。若没有问题,则很有可能是数据集的错误。

  1. 问题 :模型是基于two-stream Convnet,因此需要小心设计temporal stream的dynamic input。现在使用的normalized frame difference由于subjects的运动有许多异常值,也许是这些异常值产生噪音,加大了学到真实relationship的难度。
    解决方案:使用3\sigma来clip输入,会显著减小模型由于异常值而产生的难以converge的问题。

模型不符合数据分布

1.问题 :观察labels的分布,发现它们的绝对值很小(<0.1),并且集中在两三个值周围。现在使用的linear regression模型,loss为MSE。因此backpropagate时的也许gradient不够大,造成难以训练调试。
解决方案:转换陈classification问题。或者把MSE替换成MAE / Huber Loss,etc.

训练方法不当

1.问题 :batch size队训练的影响:batch太大时,有可能导致gradient的更新方向变得随机。

2.问题 :有30%的值比较分散,容易产生较大的grads,导致网络难以收敛。
解决方案:clip掉过大的grads以后,网络的loss明显稳定。再配合适当的lr,可让网络的loss稳定下降。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 总结 关系的存储 连接查询 自关联 子查询 常用内置函数 视图 事务 作业 设计班级表,与学生表关联,并进行查询 ...
    lyh165阅读 1,209评论 1 0
  • 数据的重要性 短信,作为企业与客户沟通最常用的渠道之一,一直以来都缺少完整的数据分析工具。对企业和营销工作者而言,...
    睡不够大师阅读 3,328评论 0 0
  • 世界那么拥挤,与其张着眼睛望别人,不如踏踏实实看自己。 不然别人走了那么多路都是你眼角膜的视觉停留,倒不如你真真切...
    俊俊雅阅读 1,917评论 0 0
  • 我记得遇见你那天 漫天的星辰 裹着我的呼吸 在湖面完成一场焰火表演
    一张机阅读 1,683评论 1 4