【人工智能】Transformers之Pipeline(一):音频分类(audio-classification)

07-19 1301阅读

​​​​​​​【人工智能】Transformers之Pipeline(一):音频分类(audio-classification)

目录

一、引言 

二、音频分类(audio-classification)

2.1 概述

2.2 技术原理

2.2.1 Wav2vec 2.0模型

 2.2.1 HuBERT模型

2.3 pipeline参数

2.3.1 pipeline对象实例化参数

2.3.2 pipeline对象使用参数 

2.4 pipeline实战

2.4.1 指令识别(默认模型)

 2.4.2 情感识别

2.5 模型排名

三、总结


一、引言 

 pipeline(管道)是huggingface transformers库中一种极简方式使用大模型推理的抽象,将所有大模型分为音频(Audio)、计算机视觉(Computer vision)、自然语言处理(NLP)、多模态(Multimodal)等4大类,28小类任务(tasks)。共计覆盖32万个模型

【人工智能】Transformers之Pipeline(一):音频分类(audio-classification)

今天介绍Audio音频的第一篇,音频分类(audio-classification),在huggingface库内共有2500个音频分类模型。

二、音频分类(audio-classification)

2.1 概述

音频分类,顾名思义就是将音频打标签或分配类别的任务。主要应用场景有语音情绪分类、语音命令分类、说话人分类、音乐风格判别、语言判别等。

【人工智能】Transformers之Pipeline(一):音频分类(audio-classification)

2.2 技术原理

音频分类,主要思想就是将音频的音谱切分成25ms-60ms的片段,通过CNN等卷积神经网络模型提取特征并进行embedding化,基于transformer与文本类别对齐训练。下面介绍2个代表模型:

2.2.1 Wav2vec 2.0模型

Wav2vec 2.0是 Meta在2020年发表的无监督语音预训练模型。它的核心思想是通过向量量化(Vector Quantization,VQ)构造自建监督训练目标,对输入做大量掩码后利用对比学习损失函数进行训练。模型结构如图,基于卷积网络(Convoluational Neural Network,CNN)的特征提取器将原始音频编码为帧特征序列,通过 VQ 模块把每帧特征转变为离散特征 Q,并作为自监督目标。同时,帧特征序列做掩码操作后进入 Transformer [5] 模型得到上下文表示 C。最后通过对比学习损失函数,拉近掩码位置的上下文表示与对应的离散特征 q 的距离,即正样本对。

【人工智能】Transformers之Pipeline(一):音频分类(audio-classification)

 2.2.1 HuBERT模型

HuBERT是Meta在2021年发表的模型,模型结构类似 Wav2vec 2.0,不同的是训练方法。Wav2vec 2.0 是在训练时将语音特征离散化作为自监督目标,而 HuBERT 则通过在 MFCC 特征或 HuBERT 特征上做 K-means 聚类,得到训练目标。HuBERT 模型采用迭代训练的方式,BASE 模型第一次迭代在 MFCC 特征上做聚类,第二次迭代在第一次迭代得到的 HuBERT 模型的中间层特征上做聚类,LARGE 和 XLARGE 模型则用 BASE 模型的第二次迭代模型提取特征做聚类。从原始论文实验结果来看,HuBERT 模型效果要优于 Wav2vec 2.0,特别是下游任务有监督训练数据极少的情况,如 1 小时、10 分钟。

【人工智能】Transformers之Pipeline(一):音频分类(audio-classification)

2.3 pipeline参数

2.3.1 pipeline对象实例化参数

  • 模型(PreTrainedModel或TFPreTrainedModel)— 管道将使用其进行预测的模型。 对于 PyTorch,这需要从PreTrainedModel继承;对于 TensorFlow,这需要从TFPreTrainedModel继承。
  • feature_extractor ( SequenceFeatureExtractor ) — 管道将使用的特征提取器来为模型编码数据。此对象继承自 SequenceFeatureExtractor。
  • modelcard(str或ModelCard,可选) — 属于此管道模型的模型卡。
  • framework(str,可选)— 要使用的框架,"pt"适用于 PyTorch 或"tf"TensorFlow。必须安装指定的框架。

    如果未指定框架,则默认为当前安装的框架。如果未指定框架且安装了两个框架,则默认为 的框架model,如果未提供模型,则默认为 PyTorch。

  • 任务(str,默认为"")— 管道的任务标识符。
  • num_workers(int,可选,默认为 8)— 当管道将使用DataLoader(传递数据集时,在 Pytorch 模型的 GPU 上)时,要使用的工作者数量。
  • batch_size(int,可选,默认为 1)— 当管道将使用DataLoader(传递数据集时,在 Pytorch 模型的 GPU 上)时,要使用的批次的大小,对于推理来说,这并不总是有益的,请阅读使用管道进行批处理。
  • args_parser(ArgumentHandler,可选) - 引用负责解析提供的管道参数的对象。
  • 设备(int,可选,默认为 -1)— CPU/GPU 支持的设备序号。将其设置为 -1 将利用 CPU,设置为正数将在关联的 CUDA 设备 ID 上运行模型。您可以传递本机torch.device或str太
  • torch_dtype(str或torch.dtype,可选) - 直接发送model_kwargs(只是一种更简单的快捷方式)以使用此模型的可用精度(torch.float16,,torch.bfloat16...或"auto")
  • binary_output(bool,可选,默认为False)——标志指示管道的输出是否应以序列化格式(即 pickle)或原始输出数据(例如文本)进行。

    2.3.2 pipeline对象使用参数 

    • 输入(np.ndarray或bytes或str或dict) — 输入可以是:
      • str这是音频文件的文件名,将以正确的采样率读取该文件以使用ffmpeg获取波形。这需要在系统上安装ffmpeg 。
      • bytes它应该是音频文件的内容,并以相同的方式由ffmpeg进行解释。
      • (np.ndarray形状为(n,)类型为np.float32或np.float64)正确采样率的原始音频(不再进行进一步检查)
      • dict形式可用于传递任意采样的原始音频sampling_rate,并让此管道进行重新采样。字典必须采用 或 格式{"sampling_rate": int, "raw": np.array},{"sampling_rate": int, "array": np.array}其中键"raw"或 "array"用于表示原始音频波形。
    • top_k(int,可选,默认为 None)— 管道将返回的顶部标签数。如果提供的数字等于None或高于模型配置中可用的标签数,则将默认为标签数。

      2.4 pipeline实战

      2.4.1 指令识别(默认模型)

      pipeline对于audio-classification的默认模型时superb/wav2vec2-base-superb-ks,使用pipeline时,如果仅设置task=audio-classification,不设置模型,则下载并使用默认模型。

      import os
      os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
      os.environ["CUDA_VISIBLE_DEVICES"] = "2"
      from transformers import pipeline
      speech_file = "./output_video_enhanced.mp3"
      pipe = pipeline(task="audio-classification")
      result = pipe(speech_file)
      print(result)

       这是一个上下左右yes及no的指令识别模型,感觉像是训练动物。

      [{'score': 0.9988580942153931, 'label': '_unknown_'}, {'score': 0.000909291033167392, 'label': 'down'}, {'score': 9.889943612506613e-05, 'label': 'no'}, {'score': 7.015655864961445e-05, 'label': 'yes'}, {'score': 5.134344974067062e-05, 'label': 'stop'}]

       2.4.2 情感识别

      我们指定模型为情感识别模型ehcalabres/wav2vec2-lg-xlsr-en-speech-emotion-recognition,具体代码为:

      import os
      os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
      os.environ["CUDA_VISIBLE_DEVICES"] = "2"
      from transformers import pipeline
      speech_file = "./output_video_enhanced.mp3"
      pipe = pipeline(task="audio-classification",model="ehcalabres/wav2vec2-lg-xlsr-en-speech-emotion-recognition")
      result = pipe(speech_file)
      print(result)

      输入为一段mp3格式的语音,输出为

      [{'score': 0.13128453493118286, 'label': 'angry'}, {'score': 0.12990005314350128, 'label': 'calm'}, {'score': 0.1262471228837967, 'label': 'happy'}, {'score': 0.12568499147891998, 'label': 'surprised'}, {'score': 0.12327362596988678, 'label': 'disgust'}]

      2.5 模型排名

      在huggingface上,我们筛选音频分类模型,并按下载量从高到低排序:

      【人工智能】Transformers之Pipeline(一):音频分类(audio-classification)

      三、总结

      本文对transformers之pipeline的音频分类(audio-classification)从概述、技术原理、pipeline参数、pipeline实战、模型排名等方面进行介绍,读者可以基于pipeline使用文中的代码极简的进行音频分类推理,应用于音频情感识别、音乐曲风判断等业务场景。

      期待您的3连+关注,如何还有时间,欢迎阅读我的其他文章:

      《Transformers-Pipeline概述》

      【人工智能】Transformers之Pipeline(概述):30w+大模型极简应用

      《Transformers-Pipeline 第一章:音频(Audio)篇》

      【人工智能】Transformers之Pipeline(一):音频分类(audio-classification)​​​​​​​

      【人工智能】Transformers之Pipeline(二):自动语音识别(automatic-speech-recognition)

      【人工智能】Transformers之Pipeline(三):文本转音频(text-to-audio)

      【人工智能】Transformers之Pipeline(四):零样本音频分类(zero-shot-audio-classification)

      《Transformers-Pipeline 第二章:计算机视觉(CV)篇》

      【人工智能】Transformers之Pipeline(五):深度估计(depth-estimation)

      【人工智能】Transformers之Pipeline(六):图像分类(image-classification)

      【人工智能】Transformers之Pipeline(七):图像分割(image-segmentation)

      【人工智能】Transformers之Pipeline(八):图生图(image-to-image)

      【人工智能】Transformers之Pipeline(九):物体检测(object-detection)

      【人工智能】Transformers之Pipeline(十):视频分类(video-classification)

      【人工智能】Transformers之Pipeline(十一):零样本图片分类(zero-shot-image-classification)

      【人工智能】Transformers之Pipeline(十二):零样本物体检测(zero-shot-object-detection)

      《Transformers-Pipeline 第三章:自然语言处理(NLP)篇》

      【人工智能】Transformers之Pipeline(十三):填充蒙版(fill-mask)

      【人工智能】Transformers之Pipeline(十四):问答(question-answering)

      【人工智能】Transformers之Pipeline(十五):总结(summarization)

      【人工智能】Transformers之Pipeline(十六):表格问答(table-question-answering)

      【人工智能】Transformers之Pipeline(十七):文本分类(text-classification)

      【人工智能】Transformers之Pipeline(十八):文本生成(text-generation)

      【人工智能】Transformers之Pipeline(十九):文生文(text2text-generation)

      【人工智能】Transformers之Pipeline(二十):令牌分类(token-classification)

      【人工智能】Transformers之Pipeline(二十一):翻译(translation)

      【人工智能】Transformers之Pipeline(二十二):零样本文本分类(zero-shot-classification)

      《Transformers-Pipeline 第四章:多模态(Multimodal)篇》

      【人工智能】Transformers之Pipeline(二十三):文档问答(document-question-answering)

      【人工智能】Transformers之Pipeline(二十四):特征抽取(feature-extraction)

      【人工智能】Transformers之Pipeline(二十五):图片特征抽取(image-feature-extraction)

      【人工智能】Transformers之Pipeline(二十六):图片转文本(image-to-text)

      【人工智能】Transformers之Pipeline(二十七):掩码生成(mask-generation)

      【人工智能】Transformers之Pipeline(二十八):视觉问答(visual-question-answering)

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]