问题描述
通过手机App的录音功能,获得用户一整夜的睡眠音频,对睡眠音频进行分割,并对睡眠阶段进行判定。
(1)假设条件一:用户在相对安静的环境下进行睡眠,背景音可能会出现风声、雨声、汽车噪音、空调声音等,背景音微弱;
(2)假设条件二:一个人睡眠,不考虑多人同时睡眠产生的音频;
(3)睡眠音频主要分割出鼾声、梦话及睡眠静音,手机App只保存鼾声和梦话音频片段;
(4)将睡眠阶段分为Deep Sleep, Light Sleep, REM Sleep, Awake,并绘制出如下波形图:
主要方案
目前采用了两套方案来实现,方案一利用语音分离技术,方案二利用语音编码技术。
方案一:语音分离技术
(1)对语音进行编码,目前主流的方法有: frequency-domain(基于频域的方法) or time-domain(基于时域的方法) methods;
(2)语音分离:构建算法获取分离的掩码矩阵(mask);
(3)对分离后的信息进行反编码,得到分离后的语音信息。
主流的语音分离技术有:TasNet, TasNet++等网络。
方案二:语音编码技术
(1)完成音频到向量的转换,1s的音频转换为96*64的向量;
(2)进行编码,目前采用的是VGG网络,后续可以尝试用其它网络来进行编码,编码过后1s的音频转为128的向量;
(3)设置3类标签,0类标签:鼾声,1类标签:梦话(使用Google的’Music’,‘Singing’,‘singing’,‘speech’,'speaking’这5个标签的数据作为梦话标签的训练集,Google原有100类样本),2类标签:其它(使用Google的其他标签的数据作为其他标签的训练集)。
(4)鼾声识别在测试集上有80%正确率(训练集比例2:1:1,2是鼾声样本,1是其他样本与梦话样本),梦话识别由于没有找到合适的数据集,目前识别效果不好,测试发现鼾声样本识别正确接近百分百,而梦话类与其他类识别准确只有2/3。
面临的问题
(1)把鼾声和梦话分离出来后,目前还不知道怎么将睡眠分为如下四个阶段:深度睡眠、浅度睡眠、REM期、清醒。我们查阅到REM期(快速动眼期)的定义为:快速眼动睡眠,眼球在此阶段时会快速移动。在这个阶段,大脑的神经元的活动与清醒的时候相同。多数在醒来后能够回忆的栩栩如生的梦都是在REM睡眠发生的。它是全部睡眠阶段中最浅的。但如何利用鼾声、梦话、静默阶段的统计数据来将睡眠定义为深度睡眠、浅度睡眠、REM期、清醒没有思路;
(2)目前的代码都是基于深度学习框架(如Tensorflow、Pytorch等),这些代码植入APP会导致安装包过大。