写点什么

[数据分析]- 音频分析 -BirdCLE-1

作者:浩波的笔记
  • 2022 年 5 月 13 日
  • 本文字数:2789 字

    阅读完需:约 9 分钟

[数据分析]-音频分析-BirdCLE-1

数据背景

作为“世界灭绝之都”,夏威夷已经失去了 68%的鸟类物种,其后果可能会损害整个食物链。研究人员利用种群监测来了解本地鸟类对环境变化和保护措施的反应。但岛上的许多鸟类都被隔离在难以接近的高海拔栖息地。由于身体监测困难,科学家们转向了声音记录。这种被称为生物声学监测的方法可以为研究濒危鸟类种群提供一种被动的、低成本的、经济的策略。目前处理大型生物声学数据集的方法涉及对每个记录的手工注释。这需要专门的训练和大量的时间。因此使用机器学习技能,通过声音来识别鸟类的种类,可以节约大量成本。具体来说,开发一个模型,可以处理连续的音频数据,然后从声音上识别物种。最好的条目将能够用有限的训练数据训练可靠的分类器。

数据介绍

数据集来源:https://www.kaggle.com/competitions/birdclef-2022/data

下载方式:https://github.com/Kaggle/kaggle-apikaggle competitions download -c birdclef-2022

  • train_metadata.csv:为训练数据提供了广泛的元数据

    primary_label -鸟类的编码。可以通过将代码附加到 https://ebird.org/species/来查看有关鸟类代码的详细信息,例如美国乌鸦的代码添加到 https://ebird.org/species/amecro

    secondary_labels: 记录员标注的背景物种,空列表并不意味着没有背景鸟的声音。

    author - 提供录音的 eBird 用户

    Filename:关联音频文件。

    rating: 浮动值在 0.0 到 5.0 之间,作为 Xeno-canto 的质量等级和背景物种数量的指标,其中 5.0 是最高的,1.0 是最低的。0.0 表示此记录还没有用户评级。

  • train_audio:大量的训练数据由 xenocanto.org 的用户慷慨上传的单个鸟类叫声的短录音组成。这些文件已被下采样到 32khz,适用于匹配测试集的音频,并转换为 ogg 格式。

  • test_soundscapes:当您提交一个笔记本时,test_soundscapes 目录将填充大约 5500 段录音,用于评分。每一个都是 1 分钟几毫秒的 ogg 音频格式,并只有一个音景可供下载。

  • test.csv:测试数据

    row_id:行的唯一标识符。

    file_id:音频文件的唯一标识符。

    bird :一行的 ebird 代码。每个音频文件每 5 秒窗口有一排为每个得分物种。

    end_time:5 秒时间窗口(5、10、15 等)的最后一秒。

数据分析

#相关库安装import pkg_resources
def placeholder(x):    raise pkg_resources.DistributionNotFoundpkg_resources.get_distribution = placeholder
!pip uninstall fastai fastcore torchaudio -y#!pip install torch==1.8.1 torchaudio==0.8.1 fastcore==1.3.20!pip install torch==1.9.0 torchaudio==0.9.0!pip install fastaudio
try:    import pycaretexcept:    !pip install pycaret-nightly
复制代码

文章从以下几个方面展开

  • 了解每个数据集,使用简单模型检查哪些特征是重要特征。

  • 了解音频数据

  • 转换音频数据并设计数据加载器来处理它们

  • 设计一个模型并通过引入各种方法来训练它以提高性能

import osimport librosafrom tqdm import tqdm
import pandas as pdfrom fastaudio.all import *from fastai.vision.all import *
import torchimport torchaudioimport fastcoreimport fastaiimport fastaudioimport torchaudiotorchaudio.set_audio_backend("sox_io")
import seaborn as snsimport matplotlib.pyplot as pltfrom matplotlib import rcParamsimport plotly.express as px
from sklearn.preprocessing import LabelEncoder
import warningswarnings.filterwarnings(action='ignore')
sns.set(style="ticks", context="talk",font_scale = 1.2)plt.style.use("seaborn-paper")plt.subplots_adjust(wspace=1)
复制代码

加载数据

# CONFIGURATIONSDATA_DIR = Path('../input/birdclef-2022/train_audio')audio_fns = get_audio_files(DATA_DIR)print(f'No. of audio files: {len(audio_fns)}')
# to save time, I subset training datameta_df = pd.read_csv('../input/birdclef-2022/train_metadata.csv')test_df = pd.read_csv('../input/birdclef-2022/test.csv')
复制代码

简要分析

meta_df.head().T.style.set_properties(**{'background-color': 'black',                           'color': 'white',                           'border-color': 'white'})
复制代码



test_df.head().T.style.set_properties(**{'background-color': 'black',                           'color': 'white',                           'border-color': 'white'})
复制代码



train_df = meta_df.drop(['url','filename','scientific_name','license','time','common_name','secondary_labels']                        ,axis=1                        ,errors='ignore')train_df = train_df.sample(1000)
enc_list = ['primary_label','author','type']for feature in enc_list:    le = LabelEncoder()    le = le.fit(train_df[feature])    train_df[feature] = le.transform(train_df[feature])
复制代码

从简单模型中理解元数据

from pycaret.classification import *
setup(data = train_df,       target = 'primary_label',      preprocess = True,      silent = True     )
复制代码



dt = create_model('dt',verbose = False)plot_model(dt, plot='feature')
复制代码


观察可以发现

  • latitue 和 longitude 是重要的特征

  • rating 的重要性相对较低。

fig = px.scatter_geo(    meta_df,    lat="latitude",    lon="longitude",    color="primary_label",    width=1000,    height=500,    title="Bird Distribution",)fig.show()
复制代码


了解训练集

train data 是一个音频文件,我们想一下有什么策略可以解决这个问题

def show_bird(audios):    for fn in audios:        audio = AudioTensor.create(fn)        audio.show()        normoc_fns = get_audio_files( '../input/birdclef-2022/train_audio/normoc')
show_bird(normoc_fns[:3])
复制代码



观察发现

  • 它们属于同一鸟类,但听起来不同

  • 似乎有可以听到噪音的音频文件

  • 即使你看波形,也没有相似之处

fig = px.scatter_geo(    meta_df[meta_df['primary_label'] == 'norcar'],    lat="latitude",    lon="longitude",    color="primary_label",    width=1000,    height=500,    title="Bird Distribution",)fig.show()
复制代码



norcar_fns = get_audio_files( '../input/birdclef-2022/train_audio/norcar')show_bird(norcar_fns[:3])
复制代码




发布于: 刚刚阅读数: 2
用户头像

还未添加个人签名 2022.05.12 加入

还未添加个人简介

评论

发布
暂无评论
[数据分析]-音频分析-BirdCLE-1_人工智能_浩波的笔记_InfoQ写作社区