简介

2021年7月13日,我和我的三个研究生一起拜访了玉米树,和王总等一起针对睡眠音频分割及识别问题进行了深入的讨论,达成了如下共识。

输入

由于保存整个晚上的睡眠音频所需要的存储空间过大,目前拟采用每隔30分钟(可自定义)录制一段睡眠音频,然后对这段音频进行分割及识别,并保存鼾声、梦话等片段。
选择30分钟作为时间片段,主要基于存储空间的考虑,下面对存储空间进行分析。
30分钟单通道、16位采样位数、采样频率44.1kHz音频的不压缩数据存储量计算方法如下:
每秒44100个采样点,44100 * 2=88200字节,30分钟:30 * 60 * 88200=158760000字节
158760000/1024/1024 约等于150MB。

输出

(1)一些睡眠事件的开始和结束时间,比如鼾声、梦话、翻身、咳嗽、打喷嚏、磨牙及其它;

  • 开始和结束时间有两种方式来表示,第一种方式是以事件为基础(时间不定长),第二种方式是以固定时间段为基础(时间定长,用户设定),到底采用哪种方式需要进一步讨论;
  • 如果采用以事件为基础,则涉及到音频片段合并策略;
    (2)这些睡眠事件对应的标签分布。

方案

采用的方案包括音频分割及识别两个方面。

分割策略

策略一:对音频按等时长进行分割,如每隔4s(可自定义),然后对分割后的音频进行识别,如果是静默音,则不保存;

优点:计算资源要求较低;
缺点:容易漏测或者多测,预测精度较低。比如在第3s开始打鼾,预测时第一个窗口被认定为鼾声,这会导致0~4s都认为是鼾声。

策略二:采用滑动窗口进行分割,如窗口大小为4s(可自定义),步长为1s(也可自定义,一般要小于窗口长度),对每个窗口执行预测,若为目标检测事件,则记录开始时间与结束时间。

优点:这种策略分割的音频就会有重叠部分,可以更好的检测音频事件的开始位置;
缺点:音频重复参与运算,计算资源要求较高。
准备对两个策略进行对比实验后,再决定最终方案选择哪个策略。

识别方法

拟采用PANN框架(YouTube)进行识别,面临的问题有:
(1)睡眠声音识别后大致划分为鼾声、梦话、翻身、咳嗽、打喷嚏、磨牙、其它几个大类;
(2)在PANN框架中有527个音频类别,但没有翻身、梦话、磨牙等我们需要的类别。
(3)梦话的形式较多,可能包括尖叫、呻吟、普通说话声、嗡嗡声等复杂声音,不太确定能归为527个类别中哪些类。
(4)如何平滑连续音频的问题,我们认为连续音频之间具有某种关联性,如何刻画这种关联性呢?(可以作为研究生发表论文的方向)
拟采用如下方法来解决:
(1)音频获取:从网络上获取翻身、梦话、磨牙等音频,如freesound.org;如果网络上没有,则需要我们自己来录制这些音频;
(2)解决标签不匹配问题:基于获取到的翻身、梦话、磨牙等音频,利用PANN框架进行识别,看看该框架会给出什么标签,则将该标签作为翻身、梦话、磨牙对应的标签。
(3)连续音频的处理:一个10s的连续音频,首先得到每个1s音频的标签分布,然后对这10s进行一个标签分布的平均,最后根据这个平均值来进行综合判断(这个处理需要再讨论)。

平台兼容性

建议开发出适用于Android及IOS的版本。

Android版本目前进展及面临的问题

1、目前的进展:
可以使用PANN框架对分割后的音频片段进行识别,识别的类型为该框架提供的527个类别,还没有根据目前的需求识别出规定的类别;
2、下一步的工作:
(1)采集翻身、梦话、磨牙等类型的音频,进行识别,获得对应的标签类别;
(2)编写开发文档及Java代码,代码符合玉米树规范,采用面向对象,利于后期维护。
3、面临的问题:
使用android studio运行程序遇到卡壳问题,建议重新创建一个线程来运行。

IOS版本目前进展及面临的问题

1、目前进展:还没有开始。
2、可能会面临的问题:使用xcode运行IOS程序时,会遇到一些底层代码调用报错问题,重写会比较麻烦。

其它

PANNs模型需要wav文件必须是单通道,采样率为32kHz;而YAMNet模型需要wav文件也必须是单通道,采样率为16kHz。

时间及人员安排

实验部分

音频采集及测试:2周。(梁翔宇、樊俊)
分割策略实验:2周。(容斌元、李鹏程)

开发部分

提供一个接口,输入是音频文件,返回分割后的音频及标签分布。
(1)Android端代码开发及文档编写:4周。(梁翔宇、樊俊)
(2)IOS端代码开发及文档编写:4周。(容斌元、李鹏程)

参考文献

[1] PANN框架
[2] 玉米树程序编写规范

睡眠音频分割及识别问题(六)--输入输出及方案讨论相关推荐

  1. 睡眠音频分割及识别问题(七)--接口输入输出讨论

    简介 关于接口输入输出的讨论. 输入 1.音频文件路径,类型为:字符串: 2.预测多标签类型的排名,前n名,类型为:整型. 处理 1.将输入的音频分割为多个以1s为时间单位的音频片段: 2.利用PAN ...

  2. 睡眠音频分割及识别问题(一)

    问题描述 通过手机App的录音功能,获得用户一整夜的睡眠音频,对睡眠音频进行分割,并对睡眠阶段进行判定. (1)假设条件一:用户在相对安静的环境下进行睡眠,背景音可能会出现风声.雨声.汽车噪音.空调声 ...

  3. 睡眠音频分割及识别问题(十)--Java读取wav文件

    简介 Waveform Audio File Format(WAVE,又或者是因为扩展名而被大众所知的 wav),是微软与 IBM公司所开发在个人电脑存储音频流的编码格式. 由于项目需要从 wav 文 ...

  4. 睡眠音频分割及识别问题(八)--数据采集

    问题 在采用PANN或者YAMNet框架进行学习的时候,没有梦话.磨牙等睡眠音频数据,在一些公开数据集上也没有找到(如果有哪位读者知道,麻烦给我在评论区留言,万分感谢). 公开数据集包括: (1)ht ...

  5. 睡眠音频分割及识别问题(二)

    输入 通过手机麦克风录制的任意长度睡眠声音. 输出 睡眠阶段曲线,该曲线可以反映出深度睡眠,浅度睡眠.REM睡眠.清醒各个阶段. 研究的核心问题 1.录制策略 (1)每隔10分钟录制一段睡眠音: 2. ...

  6. 睡眠音频分割及识别问题(十二)--基于IOS的YAMNet音频识别(总结)

    1 结构体 此部分定义了两个结构体用于存储音频信息: AudioFragment:用于存储单个音频片段(0.975s, 16000Hz)的标签评分信息: AudioInfo:用于存储整个音频信息,包含 ...

  7. 睡眠音频分割及识别问题(十一)--基于Android的YAMNet音频识别(总结)

    WAV文件格式介绍 WAV文件遵守资源交换文件格式之规则,在文件的前44(或46)字节放置标头(header),使播放器或编辑器能够简单掌握文件的基本信息,其内容以区块(chunk)为最小单位,每一区 ...

  8. 睡眠音频分割及识别问题(九)--Android下的YAMNet

    部署PANNs模型面临的问题 加载模型出错 在使用PANNs模型时,在PC端可以较好的运行,可是在Android端运行的时候,编译过程提示缺少libpytorch_jni.so文件,导致无法加载模型, ...

  9. 睡眠音频分割及识别问题(五)--YAMNet进一步分析

    简介 YAMNet 是一个经过预训练的深度网络,可基于 AudioSet-YouTube 语料库 预测 521 种音频事件类别,并采用Mobilenet_v1深度可分离卷积架构. 输入 模型训练所使用 ...

最新文章

  1. ecos 编译时无法找到 tclConfig.sh 和 tkConfig.sh
  2. 常见Z纯CSS小样式合集(三角形)
  3. 【解决方案】module 'cv2.cv2' has no attribute 'xfeatures2d'
  4. HD1281棋盘游戏(匹配+好题)
  5. 计算机网络实验3:网络设备基本配置
  6. 【转载保存】java静态方法继承与保存的问题
  7. 又是一种用于JavaScript的前端国际化方案
  8. 专家视角 | 小荷的 Oracle Database 18c 新特性快速一瞥
  9. An Introduction to Unstructured Mesh Generation Methods and Softwares for Scientific Computing
  10. cat >> ipconf << EOF > EOF是什么意思
  11. KITTI数据集评估方法小结
  12. php更换wordpress用户头像,WordPress用户头像不显示的解决方法
  13. python实现压缩,解压文件,使用密码解压文件。
  14. SEO利器 - 网页内容监控之百度自动推送
  15. Qt4 Qt5 通用设置应用软件图标 快捷方式图标方法
  16. 【可达编程】P0063. 小武老师的烤全羊
  17. Android 时区中英文显示对照
  18. ESP8266通过arduino IED连接巴法云(TCP创客云)
  19. 我在成都火车站捡了个彝族美女 第19节:饭来张口的生活
  20. vip163邮箱手机版登陆入口是哪个?vip邮箱163实用技巧

热门文章

  1. 吕布机器人唤醒方式能换么_《王者荣耀》推吕布智能机器人,网友:小学生受到1万点暴击伤害...
  2. 外设驱动库开发笔记0:EPD总体设计
  3. 通过VirtualQuery获取当前模块的句柄
  4. bert 多义词_广告行业中那些趣事系列15:超实用的基于BERT美团搜索实践
  5. JAVA进阶教学之(StrngBuffer进行字符串拼接)
  6. Nginx的配置实例(反向代理准备工作)
  7. 与计算机硬件系统紧密相关的程序设计语言是,与计算机硬件系统紧密相关的程序设计语言是...
  8. oracle 删除系统用户,Oracle数据库如何创建和删除用户
  9. python计算汉明距离_有效地使用python计算汉明距离
  10. php 如何守护进程_PHP 如何实现守护进程