使用AutoML Vision进行音频分类

荒凉一梦 提交于 2021-02-18 04:11:18

作者 | Vivek Amilkanthawar

来源 | Towards Data Science

编辑 | 代码医生团队


对于给定的音频数据集,可以使用Spectrogram进行音频分类吗?尝试使用Google AutoML Vision把音频文件转换成各自的频谱图,并使用频谱图作为分类问题的图像。

这是谱图的正式定义

 

频谱图是信号频率随时间变化的直观表示。

 

在本次实验中,将使用Kaggle的音频数据集如下

https://www.kaggle.com/c/freesound-audio-tagging/data

 

继续下载数据集{警告!! :数据集超过5GB,因此在对数据集执行任何操作时需要耐心等待。对于实验,在Google Can PlatformGCP)上租了一台Linux虚拟机,将从那里执行所有步骤。此外需要一个GCP帐户才能学习本教程}

 

步骤1:下载音频数据集

训练数据(4.1 GB

curl 

https://zenodo.org/record/2552860/files/FSDKaggle2018.

audio_train.zip?download=1 --output audio_train.zip


upzip audio_train.zip

 

测试数据(524 MB

curl 

https://zenodo.org/record/2552860/files/FSDKaggle2018.

audio_test.zip?download=1 --output audio_test.zip


unzip audio_test.zip

 

元数据(150 KB

curl 

https://zenodo.org/record/2552860/files/FSDKaggle2018.

meta.zip?download=1 --output meta_data.zip


unzip meta_data.zip

 

下载并解压缩文件夹中应该包含以下内容(注意:解压缩后重命名了该文件夹)

 

 

第2步:生成频谱图

现在已经有了音频数据,为每个音频文件创建频谱图。

https://ffmpeg.org/about.html

 

使用以下命令安装FFmpeg

sudo apt-get install ffmpeg

 

自己尝试一下进入具有音频文件的文件夹并运行以下命令来创建其频谱图

ffmpeg -i audioFileName.wav -lavfi showspectrumpic=s

=1024x512:legend=disabled anyName.jpg

 

例如训练数据集中的00044347.wav”听起来像这样

 

 

00044347.wav”的频谱图看起来像这样

 

频谱图“00044347.wav


红色区域显示音频文件中存在的不同频率的响度,并随时间表示。在上面的例子中,听到了踩镲。文件的第一部分是响亮的,然后声音逐渐消失,同样可以在其频谱图中看到。

 

上面的ffmpeg命令用图例创建了谱图; 不需要图例处理的图例,所以放下图例并为所有的图像数据创建一个普通的谱图。

 

使用以下shell脚本将所有音频文件转换为各自的频谱图(在“audio_data”文件夹所在的目录级别创建并运行以下shell脚本)


echo '>> START : Audio to Spectrogram creation <<'



for audioFile in ./audio_train/*.wav; do

        echo $audioFile

        ffmpeg -i $audioFile -lavfi showspectrumpic=s=1024x512:legend=disabled $audioFile.jpg

    done



echo '>> END : Audio to Spectrogram creation <<'

 

将所有生成的图像文件移动到文件夹spectro_data



第3步:将图像文件移动到存储

现在已经为训练音频数据生成了频谱图,将所有这些图像文件移到Google云端存储(GCS)上,然后将在那里使用AutoML Vision UI中的这些文件。

 

使用以下命令将图像文件复制到GCS

gsutil cp spectro_data/* gs://your-bucket-name/spectro-data/


 

第4步:准备文件路径及其标签

使用之前下载的元数据创建了以下CSV文件。删除所有其他列,只保留了图像文件位置及其标签,因为这是AutoML所需要的



https://docs.google.com/spreadsheets/d/1BvmLFAqaMaUE9CUhgZbklOrTulnO7ekHYnhWWWK_c_I/edit?usp=sharing

 

必须将此CSV文件放在存储其他数据的云存储中。

 

第5步:创建新数据集并导入图像

转到AutoML Vision UI并创建新数据集

https://cloud.google.com/automl/ui/vision


 

根据选择输入数据集名称并导入图像,选择第二个选项“在云存储上选择CSV文件”,并提供云存储上CSV文件的路径。

 

 

导入图像的过程可能需要一段时间,导入完成后将收到来自AutoML的电子邮件。

 

导入图像数据完成后,将看到类似这样的内容

 

 

6步:开始训练

这一步非常简单,只需验证标签并开始训练。所有上传的图像将自动分为训练,验证和测试集。

 

 

 

为新模型命名并选择训练预算

 

对于实验,选择1节点小时(免费*)作为训练预算,并开始训练模型并查看其执行情况。

 

现在再等待训练完成。结束后会收到一封电子邮件,可以离开屏幕稍后再回来; 让模型训练。

 

 

第7步:评估

这是结果

 

 

只需极少的努力,模型就做得很好

 

 

恭喜!只需几个小时的工作,在AutoML Vision的帮助下,现在非常确定使用其频谱图对给定音频文件的分类可以使用机器学习视觉方法完成。

 

有了这个结论,可以使用CNN构建自己的视觉模型,并进行参数调整并产生更准确的结果。

 

如果不想构建自己的模型,请继续使用更多节点小时训练相同的模型,并使用PREDICT选项卡中的说明在生产中使用您的模型。


推荐阅读

使用CNN和RNN进行音乐流派识别


关于图书

《深度学习之TensorFlow:入门、原理与进阶实战》和《Python带我起飞——入门、进阶、商业实战》两本图书是代码医生团队精心编著的 AI入门与提高的精品图书。配套资源丰富:配套视频、QQ读者群、实例源码、 配套论坛:http://bbs.aianaconda.com 。更多请见:https://www.aianaconda.com


点击“阅读原文”进入大蛇智能鉴黄世界

本文分享自微信公众号 - 相约机器人(xiangyuejiqiren)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!