先放个排名:
没错,榜一AiFool就是我了,打工赚点米饭钱。。。

大赛简介
该数据集收录的城市声音包含10个声音类别、8732个声音文件(每个文件最长不超过4秒)。

环境声音分类是一个不断发展的研究领域,例如对导致城市噪声污染的声音研究。鉴于对环境,特别是城市环境声音进行分类的各种研究,我们应该使用哪种分类法,它是否能满足我们的研究需求等并没有明确的结论。通过本赛题建立准确的音频分类模型,希望给大家带来更多对音频分类方法上的思考与突破。

比赛链接:https://www.flyai.com/d/173

赛事主题和数据说明
赛题描述
通过实现算法并提交训练,获取奖金池奖金。小提示:抢先更新算法排行榜,有更大机会获取高额奖金哦!

数据来源
UrbanSoundClassification

数据描述
由于需要提交代码作品在云端进行训练,参赛数据集不对外开放。仅提供调试数据,可通过使用本地调试的方式获取调试数据集。本地调试和提交指南请查看[文档中心]

字段说明:

文件名 字段名称 字段类型 备注
ID string 不为空 音频路径
Class string 大于等于 0, 小于等于 9 音频分类
参考文献:

[1]无

评审标准
算法输入输出格式
输入字段: ID,

输出字段: Class,

评审指标说明
准确率(Accuracy):对于给定的测试数据集,预测正确的样本数与实际总样本数之比
True,表示预测正确的样本数数量
Total Number of Samples,表示实际总样本数数量
计算公式如下:

实战开始

1.数据描述

wav音频文件名 音频分类
n.wav class n

通俗一点就是模型的输入是wav格式的音频文件,输出是这个音频的类别。
类别一共有这几种:

self.list_labels = ['air_conditioner', 'car_horn', 'children_playing', 'dog_bark','drilling','engine_idling', 'gun_shot', 'jackhammer', 'siren', 'street_music']

再来说一下wav格式的音频文件:
这里先举个例子,获取音频信息:

with wave.open(wav_path, "rb") as f:f = wave.open(wav_path)print(f.getparams())

返回内容为:

  • 声道,
  • 采样宽度,
  • 帧速率,
  • 帧数,
  • 唯一标识,
  • 无损


音频信息:
采样点的个数为 2510762,采样的频率为44100HZ,通过这两个参数可以得到声音信号的时长,每个采样点是16 bit = 2 bytes ,那么将采样点的个数 25107622/(10241024)=4.78889MB,那么这个信息就是文件大小信息。

检验一下声音波形的时间
xx.wav 4.78MB,时长56s
time = 56.93337868480726

WAV文件中由以下三个部分组成:
1.“RIFF” chunk descriptor
2.The “fmt” sub-chunk
3.The “data” sub-chunk
存这些信息的时候都要要有 “ID”、“大小”、“格式”,这些信息标注了数据的位置, “WAV”格式由“fmt”和“data”,两个部分组成,其中“fmt”的存储块用来存音频文件的格式,“data”的存储块用来存实际听到的声音的信息,物理上描述的振幅和时间:长度(时间)和振幅,当然人的耳朵听听见的是长度和音调。也就是说可以读取这个数组,在配合频率的信息直接画出波形图。

通过这个图片,应该可以对音频信号有个大体的概念。音频可以分解为时间维度上的频率波。既然是分类问题,那最重要的就是提取音频特征了,我们有了从时间维度提取音频特征的方法,那接下来再用一些其他的方法,丰富其特征。

2.音频特征提取方法

先走个捷径:

(1)使用spafe提取音频特征

spafe.fbanks

Bark filterbanks

import matplotlib.pyplot as plt
from spafe.fbanks import bark_fbanks# compute fbanks
fbanks = bark_fbanks.bark_filter_banks(nfilts=24, nfft=512, fs=16000)# plot fbanks
for i in range(len(fbanks)):plt.plot(fbanks[i])plt.ylim(0, 1.1)plt.grid(True)plt.ylabel(ylabel)plt.xlabel(xlabel)plt.show()

Gammatone filterbanks

import matplotlib.pyplot as plt
from spafe.fbanks import gammatone_fbanks# compute fbanks
fbanks = gammatone_fbanks.gammatone_filter_banks(nfilts=24, nfft=512, fs=16000)# plot fbanks
for i in range(len(fbanks)):plt.plot(fbanks[i])plt.ylim(0, 1.1)plt.grid(True)plt.ylabel(ylabel)plt.xlabel(xlabel)plt.show()

Mel filterbanks

import matplotlib.pyplot as plt
from spafe.fbanks import mel_fbanks# compute fbanks
fbanks = mel_fbanks.mel_filter_banks(nfilts=24, nfft=512, fs=16000)# plot fbanks
for i in range(len(fbanks)):plt.plot(fbanks[i])plt.ylim(0, 1.1)plt.grid(True)plt.ylabel(ylabel)plt.xlabel(xlabel)plt.show()

spafe.features

MFCC, IMFCC, MFE

import scipy.io.wavfile
import spafe.utils.vis as vis
from spafe.features.mfcc import mfcc, imfcc, mfe# read wave file
fs, sig = scipy.io.wavfile.read('../test.wav')# compute mfccs and mfes
mfccs  = mfcc(sig, 13)
imfccs = imfcc(sig, 13)
mfes   = mfe(sig, fs)# visualize features
vis.visualize(mfccs, 'MFCC Coefficient Index','Frame Index')
vis.visualize(imfccs, 'IMFCC Coefficient Index','Frame Index')
vis.plot(mfes,  'MFE Coefficient Index','Frame Index')




上面说的是一种比较便捷的提取音频特征的方法,但是要做到提取自定义的特征,还是要用其他的方法,写累了,,,未完待续。。。。

这里整理了多种音频特征提取方法(bark,gamma,linear,mel,bfcc,gfcc,lfcc,lpc,mfcc,msrcc,ngcc,pncc,psrcc,rplp,spfeats),开箱即用,欢迎下载:
音频特征提取示例

(2)使用librosa提取音频特征

这个是flyai给出的输入示例,ID表示输入音频的id号。

def input_x(self, ID):duration = 2.97sr = 22050y, sr = librosa.load(os.path.join(path.DATA_PATH, ID), duration=duration, sr=sr)return y

本模型使用改进后的函数:

def input_x(self, ID):duration = 2.97sr = 22050#y, sr = librosa.load(os.path.join(path.DATA_PATH, ID), duration=duration, sr=sr)x, xsr = sf.read(os.path.join(path.DATA_PATH, ID), always_2d=True)x = self.parse_audio(x)fx = self.mean_mfccs(x)return fx

先来介绍一下librosa的使用方法:介绍

读取音频

librosa.load(path, sr=22050, mono=True, offset=0.0, duration=None)

读取音频文件。默认采样率是22050,如果要保留音频的原始采样率,使用sr = None。

参数:
path :音频文件的路径。
sr :采样率,如果为“None”使用音频自身的采样率
mono :bool,是否将信号转换为单声道
offset :float,在此时间之后开始阅读(以秒为单位)
持续时间:float,仅加载这么多的音频(以秒为单位)

返回:
y :音频时间序列
sr :音频的采样率

使用soundfile读取音频文件

这里要注意的是原始音频文件的声道和原始采样率信息,如果设置错误会导致原始的特征失真。
我并没有使用librosa.load,因为我认为pysoundfile更好用,而且librosa兼容性有时候不好,读取某些文件会报错,而always_2d=True参数会使pysoundfile读取出的音频文件具有相同的shape。

pysoundfile文档地址:https://pypi.org/project/SoundFile/
https://pysoundfile.readthedocs.io/en/latest/#module-soundfile

SoundFile has evolved rapidly during the last few releases. Most
notably, we changed the import name from import pysoundfile to import
soundfile
in 0.7. In 0.6, we cleaned up many small inconsistencies,
particularly in the the ordering and naming of function arguments and
the removal of the indexing interface.

In 0.8.0, we changed the default value of always_2d from True to
False. Also, the order of arguments of the write function changed from
write(data, file, …) to write(file, data, …).

In 0.9.0, we changed the ctype arguments of the buffer_* methods to
dtype, using the Numpy dtype notation. The old ctype arguments still
work, but are now officially deprecated.


Examples

```python
>>> import soundfile as sf
>>> data, samplerate = sf.read('stereo_file.wav')
>>> data
array([[ 0.71329652,  0.06294799],[-0.26450912, -0.38874483],...[ 0.67398441, -0.11516333]])
>>> samplerate
44100

这里整理了多种音频特征提取方法(bark,gamma,linear,mel,bfcc,gfcc,lfcc,lpc,mfcc,msrcc,ngcc,pncc,psrcc,rplp,spfeats),开箱即用,欢迎下载:
音频特征提取示例

其实可以按照上面的方法,把上述几种特征都提取出来,特征不够怎么能练好丹呢

UrbanSound8K-城市音频分类实战相关推荐

  1. Keras深度学习实战(39)——音乐音频分类

    Keras深度学习实战(39)--音乐音频分类 0. 前言 1. 数据集与模型分析 1.1 数据集分析 1.2 模型分析 2. 歌曲流派分类模型 2.1 数据加载与预处理 2.2 模型构建与训练 3. ...

  2. 遭遇棘手 交接_Librosa的城市声音分类-棘手的交叉验证

    遭遇棘手 交接 大纲 (Outline) The goal of this post is two-fold: 这篇文章的目标有两个: I'll show an example of implemen ...

  3. 使用深度学习进行音频分类的端到端示例和解释

    声音分类是音频深度学习中应用最广泛的方法之一.它包括学习对声音进行分类并预测声音的类别.这类问题可以应用到许多实际场景中,例如,对音乐片段进行分类以识别音乐类型,或通过一组扬声器对短话语进行分类以根据 ...

  4. pytorch 音频分类_Pytorch中音频的神经风格转换

    pytorch 音频分类 They've been some really interesting applications of style transfer. It basically aims ...

  5. Pytorch音频分类

    pytorch实现音频分类代码 这两天学习了下pytorch,动手练习练习 数据集:来源是KAGGLE的一个音频分类的比赛 数据集介绍:(需要梯子)https://urbansounddataset. ...

  6. 【音频分类与检测】PANNs:用于音频模式识别的大规模预训练音频神经网络

    文章目录 摘要 1.引言 2.音频标记系统 2.1 CNNs 2.2 ResNets 2.3 MobileNets 2.4 一维CNNs 3.Wavegram-CNN 系统 3.1 Wavegram- ...

  7. 婴儿哭声分类识别实现(准确率99.3%)(深度学习、迁移学习、音频分类、tensorflow)

    一.项目概述 本文是婴儿哭声分类识别系统化的主体部分,主要解决智能音频分类的问题.基于此目标,本文查找了大量资料,并做了大量实验,最后获得了一个婴儿哭声分类识别准确率相对较高的深度学习模型--迁移学习 ...

  8. 使用KNN模型进行多标签分类实战(Multilabel Classification)

    使用KNN模型进行多标签分类实战(Multilabel Classification) 详细的:二分类.多分类.多标签分类.多输出分类的概念参考笔者如下博文. 分类家族:二分类.多分类.多标签分类.多 ...

  9. 使用KNN模型进行多输出分类实战(Multioutput Classification)

    使用KNN模型进行多输出分类实战(Multioutput Classification) 详细的:二分类.多分类.多标签分类.多输出分类的概念参考笔者如下博文. 分类家族:二分类.多分类.多标签分类. ...

最新文章

  1. java 多线程 同步 观察者 并发集合的一个例子
  2. mysql userstat_mysql 中记录用户登录错误日志方法小结
  3. 20155203 - 杜可欣 - 预备作业2
  4. 摸透 Redis 主从复制、哨兵、Cluster 三种模式
  5. a*算法流程图_单片机常用的13个C语言算法,看过的据说都晋级高手了
  6. linux如何安装eclipse
  7. value toDF is not a member of org.apache.spark.rdd.RDD[People]
  8. mysql中有sa_SA工作-mysql设计规范
  9. 科普一下人工智能领域的研究方向
  10. ios和android安全对比
  11. 数据结构实验1.2:高精度计算PI值
  12. Springboot网络微小说的设计与实现毕业设计源码031758
  13. 计算机管理服务无法显示,打印机属性无法打开,始终显示: 无法显示计算机属性. 后台打印程序服务未运行....
  14. 关于2048小游戏的开发感想
  15. mysql之sql语句优化
  16. 黑苹果安装完以后的优化
  17. 罗玉凤(凤姐)在网上评论说华为早就该垮了!大家怎么看?
  18. C++中的库文件导入与导出
  19. kubekey部署k8s集群
  20. 一个大龄青年转做开发的开端,记录学习过程及督促自己(2021.5.25 10:04)

热门文章

  1. 一个硬件高手的经验之谈
  2. Delphi压缩解压文件,无需第三方控件
  3. 酷管家 系统更新服务器,魔筷酷管家SCRM:“企微+私域”,搭建流量新体系
  4. BLDC-滑模观测器
  5. 计算机想象英语作文,想象英语作文
  6. ubunut系统清理 删除无用缓存及垃圾文件
  7. vue事件修饰符,六次实操带你快速了解与应用~
  8. gpt mac linux window guid type,单硬盘安装黑苹果Mac+Win双系统步骤(赠送GUID模式/GPT分区教程)...
  9. java基于微信小程序的校园失物招领系统+ssm+uinapp+Mysql+计算机毕业设计
  10. 奥村模型计算机仿真,实验三_Okumura-Hata方法计算机仿真