# 城市声音分类 Urban Sound Classification
## 使用 Visual Studio Tools for AI 加速数据分析案例开发
## 一、背景
本实验选择了声音分类这一非常流行的研究领域。声音分类在很多场景中都有大模型的应用,例如对音乐的分类可以应用于音乐检索和音乐推荐中;对人声的分类可以应用在身份识别、智能家居中。本实验的背景是城市声音的分类,这是智慧城市非常重要的话题,如果能对城市中随机出现的声音进行正确的分类,那么可以及时对一些突发情况做出预警或采取措施,例如在检测到警笛声后可以自动调整红绿灯为应急车辆提供道路方便、在检测到持续犬吠声后可以及时出动城管予以处理、在检测到工业噪声后可为行政处罚提供证据等等,因此城市声音分类有着非常重要的研究和实用价值。
## 二、开发环境
本实验使用到与`Microsoft Visual Studio`、`VS Tools for AI`等开发组件,涉及到了`TensorFlow`、`NumPy`、`Pandas`、`Sklearn`等框架和库,以及`NVIDIA GPU`驱动,`CUDA`和`cuDNN`等。
详细的环境配置方法见`VS Tools for AI`[官方文档](https://github.com/Microsoft/vs-tools-for-ai/blob/master/docs/zh-hans/docs/prepare-localmachine.md)。
配置好环境后,进入`Microsoft Visual Studio`,本实验使用的是2017版本。点击`文件`、`新建`、`项目`,然后在`AI工具`中选择`通用Python应用程序`,项目名称设置为`urban-sound-classification`,点击`确认`即可创建项目。
后续双击`urban-sound-classification.sln`即可进入项目。
## 三、数据准备
本实验的数据来源于[Analytics Vidhya](https://datahack.analyticsvidhya.com/contest/practice-problem-urban-sound-classification/)。数据包括了十种不同类型的城市声音,如表一所示。本实验的任务即通过对音乐数据的分析对十种类型的城市声音正确地分类。
表一
|声音类型|字段|
|:---:|:---|
|空调机|air_conditioner|
|汽车喇叭|car_horn|
|小孩子玩耍|children_playing|
|犬吠|dog_bark|
|钻孔|drilling|
|发动机怠速|engine_idling|
|枪击|gun_shot|
|手提钻|jackhammer|
|警报|siren|
|街头音乐|street_music|
实验数据可在[此链接](https://drive.google.com/drive/folders/0By0bAi7hOBAFUHVXd1JCN3MwTEU)中下载,本实验使用到了`train.zip`,解压后`Train`文件夹中包含了所有的`wav`音频文件,`train.csv`中记录了每个音频对应的`ID`及其类别。
## 四、数据探索
### 4.1 数据基本描述
首先查看数据的基本描述。本实验使用`librosa`作为音频处理库,首先加载`train.csv`,然后计算每个对应音频的时长,会发现共有`5435`条数据,其中有八种类型的声音总条数大于600,只有gun_shot和car_horn的样本条数较少,因此本数据集完整且较为平衡。一共有4560条音频数据的时长为4秒钟,其余的时长均小于4秒,因此可能需要做部分预处理。
### 4.2 数据可视化
下面将音频表示为波形(即波形幅度包络图),以直观地查看数据。
可视化结果如下所示:
![air_conditioner](./images/wavplots/1.1.png)
![car_horn](./images/wavplots/1.2.png)
![children_playing](./images/wavplots/1.3.png)
![dog_bark](./images/wavplots/1.4.png)
![drilling](./images/wavplots/1.5.png)
![engine_idling](./images/wavplots/1.6.png)
![gun_shot](./images/wavplots/1.7.png)
![jackhammer](./images/wavplots/1.8.png)
![siren](./images/wavplots/1.9.png)
![street_music](./images/wavplots/1.10.png)
上面可视化的波形是将声音的振幅图形化,只能体现声音的振幅也就是整体音量的大小变化,而声音实际上是各种简单正弦波的叠加,因此下面使用频谱图将声音的频率图形化。
![air_conditioner](./images/specshow/Figure_1.png)
![car_horn](./images/specshow/Figure_1-1.png)
![children_playing](./images/specshow/Figure_1-2.png)
![dog_bark](./images/specshow/Figure_1-3.png)
![drilling](./images/specshow/Figure_1-4.png)
![engine_idling](./images/specshow/Figure_1-5.png)
![gun_shot](./images/specshow/Figure_1-6.png)
![jackhammer](./images/specshow/Figure_1-7.png)
![siren](./images/specshow/Figure_1-8.png)
![street_music](./images/specshow/Figure_1-9.png)
上图实际上是线性频谱图,由于部分声音的频率整体较低,因此还可以是使用对数频谱图将整体拉高一些,以观察在低频声音的信息。观察声音类型为“发动机怠速”的两种频谱图,可以发现线性频谱图低频部分原来被掩盖的信息在对数频谱图中得到了显示。
![engine_idling](./images/specshow_log/Figure_1-5.png)
## 五、数据预处理
在上一节的数据探索中,可以发现本实验的数据较为完善且平衡,因此本节预处理将着重在特征工程的处理上。
### 5.1 音频特征
音频是非结构的信息、包含了很多特征,需要根据问题的需要提取相应的特征。实验包括了下列音频特征。
- 过零率(Zero crossing rate)
- 光谱质心(Spectral centroid)
- 色度(Chroma)
- 调性网络(Tonnetz)
- 梅尔频率倒谱系数(MFCC)
### 5.2 MFCC特征提取
实验首先提取MFCC特征。首先读取原始数据种的`csv`文件,该文件中包括了每个`wav`文件的ID和对应的分类标签,代码如下所示:
```python
data_path = 'data'
data = pd.read_csv(os.path.join(data_path, 'train.csv'))
print(data.shape)
```
由于标签值为字符串形式,在深度学习模型中不便于表示,因此这里使用`sklearn`的`LabelEncoder`将字符串转换为数值形式,如下所示:
```python
sound_classes = ['air_conditioner', 'car_horn', 'children_playing', 'dog_bark', 'drilling', 'engine_idling',
'gun_shot', 'jackhammer', 'siren', 'street_music']
le = LabelEncoder()
le.fit(sound_classes)
data['label'] = le.transform(data['Class'])
```
对于每一个`wav`文件,首先需要根据其ID读取相应的音频文件,然后使用`librosa`库提取MFCC特征。需要注意的是,由于源文件中各音频长度不等,因此提取出的MFCC特征会有不等的时间步维度。本实验将采取两种方式来处理该问题,第一种是直接对各个时间步的特征值求平均;第二种是将长度较短的特征向量补全到统一的长度。对于补全后的特征矩阵,使用`sklearn.preprocessing.scale`将数据标准化,使得数据无量纲化,避免数据太大引发的数据问题。代码如下所示。
```python
def parse_wav(data):
n_mfcc = 40
all_mfcc = np.empty((0, n_mfcc, 173))
all_mfcc_m = np.empty((0, n_mfcc))
all_mfcc_scale = np.empty((0, n_mfcc, 173))
for i, row in data.iterrows():
id = row[0]
print(id)
wav_file = os.path.join(data_path, 'Train', str(id) + '.wav')
time_series, sampling_rate = librosa.load(wav_file, res_type='kaiser_fast')
mfcc = librosa.feature.mfcc(y=time_series, sr=sampling_rate, n_mfcc=n_mfcc)
mfcc_m = np.mean(mfcc, axis=1).T
if mfcc.shape[1] < 173:
padding = np.zeros((n_mfcc, 173 - mfcc.shape[1]))
mfcc = np.concatenate([mfcc, padding], axis=1)
all_mfcc = np.vstack((all_mfcc, [mfcc]))
all_mfcc_m = np.vstack((all_mfcc_m, [mfcc_m]))
mfcc_scale = scale(mfcc)
all_mfcc_scale = np.vstack((all_mfcc_scale, [mfcc_scale]))
return all_mfcc, all_mfcc_m, all_mfcc_scale
```
### 5.3 色度特征提取
本小节将对色度特征进行提取,与上节中MFCC提取方法类似,色度特征矩阵因为音频长度不等也会出现维度不一致,因此使用同样的两种方法进行处理。这里同样对补全后的矩阵进行数据标准化操作。核心代码如下所示:
```python
def parse_wav(data):
all_chroma = np.empty((0, 12, 173))
all_chroma_m = np.empty((0, 12))
all_chroma_scale = np.empty((0, 12, 173))
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
这里为你收集整理了关于AI,机器学习,深度学习相关的资料一份,质量非常高,如果你投入时间去研究几天相信肯定对你有很大的帮助。到时候你会回来感谢我的。 本资源是经过本地编译测试、可打开、可运行的文件或源码,可以用于毕业设计、课程设计的应用、参考和学习需求,请放心下载。 祝愿你在这个毕业设计项目中取得巨大进步,顺利毕业! 但强调一下,这些项目源码仅供学习和研究之用。在使用这些资源时,请务必遵守学术诚信原则和相关法律法规,不得将其用于任何商业目的或侵犯他人权益的行为。对于任何因使用本资源而导致的问题,包括但不限于数据丢失、系统崩溃或安全漏洞,风险自担!
资源推荐
资源详情
资源评论
收起资源包目录
城市声音分类 Urban Sound Classification with TensorFlow Keras - .zip (76个子文件)
Urban-Sound-Classification-VS-master
urban-sound-classification.sln 989B
.gitattributes 2KB
urban-sound-classification
chroma.py 2KB
data
download_link.txt 67B
train.csv 87KB
feature.py 2KB
cnn.py 3KB
rnn.py 3KB
urban-sound-classification.pyproj 7KB
mfcc.py 2KB
mlp.py 2KB
data_explore.py 3KB
.gitignore 4KB
images
train
chroma_m_mlp-lr001
Figure_1-1.png 49KB
Figure_1.png 46KB
chroma_s_gru-lr001
Figure_1-1.png 44KB
Figure_1.png 47KB
mfcc_m_mlp-lr0001
Figure_1-1.png 25KB
Figure_1.png 33KB
feature_mlp-lr001
Figure_1-1.png 21KB
Figure_1.png 22KB
chroma_s_cnn-lr0001
Figure_1-1.png 38KB
Figure_1.png 34KB
chroma_s_lstm-lr001
Figure_1-1.png 41KB
Figure_1.png 47KB
mfcc_s_gru-lr001
Figure_1-1.png 26KB
Figure_1.png 28KB
mfcc_s_cnn-lr0001
Figure_1-1.png 37KB
Figure_1.png 35KB
feature_mlp-lr0005
Figure_1-1.png 31KB
Figure_1.png 31KB
chroma_m_mlp-lr0001
Figure_1-1.png 32KB
Figure_1.png 35KB
mfcc_s_cnn-lr001
Figure_1-1.png 50KB
Figure_1.png 43KB
chroma_s_lstm-lr0001
Figure_1-1.png 47KB
Figure_1.png 45KB
chroma_s_gru-lr0001
Figure_1-1.png 43KB
Figure_1.png 40KB
mfcc_m_mlp-lr005
Figure_1-1.png 27KB
Figure_1.png 38KB
mfcc_m_mlp-lr001
Figure_1-1.png 34KB
Figure_1.png 51KB
feature_mlp-lr0001
Figure_1-1.png 25KB
Figure_1.png 24KB
specshow
Figure_1-8.png 223KB
Figure_1-9.png 267KB
Figure_1-7.png 263KB
Figure_1-5.png 248KB
Figure_1-6.png 93KB
Figure_1-3.png 191KB
Figure_1-1.png 43KB
Figure_1-2.png 261KB
Figure_1-4.png 274KB
Figure_1.png 264KB
specshow_log
Figure_1-8.png 181KB
Figure_1-9.png 190KB
Figure_1-7.png 186KB
Figure_1-5.png 181KB
Figure_1-6.png 79KB
Figure_1-3.png 163KB
Figure_1-1.png 37KB
Figure_1-2.png 189KB
Figure_1-4.png 191KB
Figure_1.png 184KB
wavplots
1.4.png 83KB
1.1.png 64KB
1.9.png 72KB
1.2.png 121KB
1.3.png 64KB
1.10.png 58KB
1.5.png 79KB
1.7.png 62KB
1.8.png 119KB
1.6.png 143KB
README.md 21KB
共 76 条
- 1
资源评论
高校毕业设计
- 粉丝: 191
- 资源: 385
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功