实用篇 | huggingface的简单应用

news2024/11/27 9:40:29

 本文主要介绍hugging Face(拥抱脸)的简单介绍以及常见用法,用来模型测试是个好的工具~

 如下图所示左边框是各项任务,包含多模态(Multimodal),计算机视觉(Computer Vision),自然语言处理(NLP)等,右边是各任务模型。

本文测试主要有

目录

示例1:语音识别

1.1.语音识别

1.2.语音情绪识别

示例2:多模态中的vit模型提取图片特征

示例3:自然语言处理(NLP)中的翻译实现

问题与解决


示例1:语音识别

点击任务栏里的 Audio Classification(语音分类)任务

1.1.语音识别

点开一个模型,是基于语音的情绪识别,有的作者可能有写模型描述(Model description),任务和数据集描述(Task and dataset description),使用示例(Usage examples)有的作者不会写的很详细。

 

 虽然是不同用户的模型,但是实现都是语音情绪识别,相同hubert模型,训练的数据集不同~

 使用案例

git clone https://github.com/m3hrdadfi/soxan.git
import torch
import torch.nn as nn
import torch.nn.functional as F
import torchaudio
from transformers import AutoConfig, Wav2Vec2FeatureExtractor
import librosa
import IPython.display as ipd
import numpy as np
import pandas as pd
from src.models import Wav2Vec2ForSpeechClassification, HubertForSpeechClassification

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model_name_or_path = "harshit345/xlsr-wav2vec-speech-emotion-recognition"
config = AutoConfig.from_pretrained(model_name_or_path)
feature_extractor = Wav2Vec2FeatureExtractor.from_pretrained(model_name_or_path)
sampling_rate = feature_extractor.sampling_rate
model = Wav2Vec2ForSpeechClassification.from_pretrained(model_name_or_path).to(device)

def speech_file_to_array_fn(path, sampling_rate):
    speech_array, _sampling_rate = torchaudio.load(path)
    resampler = torchaudio.transforms.Resample(_sampling_rate)
    speech = resampler(speech_array).squeeze().numpy()
    return speech
def predict(path, sampling_rate):
    speech = speech_file_to_array_fn(path, sampling_rate)
    inputs = feature_extractor(speech, sampling_rate=sampling_rate, return_tensors="pt", padding=True)
    inputs = {key: inputs[key].to(device) for key in inputs}
    with torch.no_grad():
        logits = model(**inputs).logits
    scores = F.softmax(logits, dim=1).detach().cpu().numpy()[0]
    outputs = [{"Emotion": config.id2label[i], "Score": f"{round(score * 100, 3):.1f}%"} for i, score in enumerate(scores)]
    return outputs

# path for a sample
path = '/workspace/tts_dataset/studio/studio_audio/studio_a_00000.wav'   
outputs = predict(path, sampling_rate)
print(outputs)

 更改代码中的.wav地址

要运行前必须安装的是huggingface的库,所以之前没有的话安装(建议python3.8以上)

# requirement packages
pip install git+https://github.com/huggingface/datasets.git
pip install git+https://github.com/huggingface/transformers.git

# 语音处理需要以下俩个库,任务不同,所安装的库不同
pip install torchaudio
pip install librosa

1.2.语音情绪识别

 

 原文提供了预测方法,直接是实现不了的,需要修改


def predict_emotion_hubert(audio_file):
    """ inspired by an example from https://github.com/m3hrdadfi/soxan """
    from audio_models import HubertForSpeechClassification
    from transformers import  Wav2Vec2FeatureExtractor, AutoConfig
    import torch.nn.functional as F
    import torch
    import numpy as np
    from pydub import AudioSegment

    model = HubertForSpeechClassification.from_pretrained("Rajaram1996/Hubert_emotion") # Downloading: 362M
    feature_extractor = Wav2Vec2FeatureExtractor.from_pretrained("facebook/hubert-base-ls960")
    sampling_rate=16000 # defined by the model; must convert mp3 to this rate.
    config = AutoConfig.from_pretrained("Rajaram1996/Hubert_emotion")

    def speech_file_to_array(path, sampling_rate):
        # using torchaudio...
        # speech_array, _sampling_rate = torchaudio.load(path)
        # resampler = torchaudio.transforms.Resample(_sampling_rate, sampling_rate)
        # speech = resampler(speech_array).squeeze().numpy()
        sound = AudioSegment.from_file(path)
        sound = sound.set_frame_rate(sampling_rate)
        sound_array = np.array(sound.get_array_of_samples())
        return sound_array

    sound_array = speech_file_to_array(audio_file, sampling_rate)
    inputs = feature_extractor(sound_array, sampling_rate=sampling_rate, return_tensors="pt", padding=True)
    inputs = {key: inputs[key].to("cpu").float() for key in inputs}

    with torch.no_grad():
        logits = model(**inputs).logits

    scores = F.softmax(logits, dim=1).detach().cpu().numpy()[0]
    outputs = [{
        "emo": config.id2label[i],
        "score": round(score * 100, 1)}
        for i, score in enumerate(scores)
    ]
    return [row for row in sorted(outputs, key=lambda x:x["score"], reverse=True) if row['score'] != '0.0%'][:2]

 当然可以不按作者的写

import torch
import torch.nn as nn
import torch.nn.functional as F
import torchaudio
from transformers import AutoConfig, Wav2Vec2FeatureExtractor
from src.models import Wav2Vec2ForSpeechClassification, HubertForSpeechClassification

#dataset: AVDESS
model_name_or_path = "Rajaram1996/Hubert_emotion"

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
config = AutoConfig.from_pretrained(model_name_or_path)
feature_extractor = Wav2Vec2FeatureExtractor.from_pretrained(model_name_or_path)
sampling_rate = feature_extractor.sampling_rate

# for wav2vec
#model = Wav2Vec2ForSpeechClassification.from_pretrained(model_name_or_path).to(device)

# for hubert
model = HubertForSpeechClassification.from_pretrained(model_name_or_path).to(device)


def speech_file_to_array_fn(path, sampling_rate):
    speech_array, _sampling_rate = torchaudio.load(path)
    resampler = torchaudio.transforms.Resample(_sampling_rate, sampling_rate)
    speech = resampler(speech_array).squeeze().numpy()
    return speech


def predict(path, sampling_rate):
    speech = speech_file_to_array_fn(path, sampling_rate)
    inputs = feature_extractor(speech, sampling_rate=sampling_rate, return_tensors="pt", padding=True)
    inputs = {key: inputs[key].to(device) for key in inputs}

    with torch.no_grad():
        logits = model(**inputs).logits

    scores = F.softmax(logits, dim=1).detach().cpu().numpy()[0]
    outputs = [{"Emotion": config.id2label[i], "Score": f"{round(score * 100, 3):.1f}%"} for i, score in
               enumerate(scores)]
               if outputs["Score"]
    return outputs

# 001.wav =hap

path = "/workspace/dataset/emo/audio/000-001.wav"
outputs = predict(path, sampling_rate)   

print(outputs)

示例2:多模态中的vit模型提取图片特征

 点进模型后,复制代码(如果想查看输出,还需要自己去进行print)

from transformers import ViTFeatureExtractor, ViTModel
from PIL import Image
import requests

url = 'http://images.cocodataset.org/val2017/000000039769.jpg'
image = Image.open(requests.get(url, stream=True).raw)

feature_extractor = ViTFeatureExtractor.from_pretrained('facebook/dino-vitb16')
model = ViTModel.from_pretrained('facebook/dino-vitb16')
inputs = feature_extractor(images=image, return_tensors="pt")
outputs = model(**inputs)
last_hidden_states = outputs.last_hidden_state

print(outputs,last_hidden_states)

结果

代码会下载其中的文件和打包好的模型,也就是下图这些文件

*注意:这里要求库,安装命令如下

# requirement packages
pip install datasets
pip install transformers
pip install pillow

示例3:自然语言处理(NLP)中的翻译实现

选一个 翻译任务(Translation),再选择一个中英翻译模型(一般模型名称都是模型,任务等的简写),例如下方右边的模型就表示Helsinki-NLP提供的数据集为opus,mt(machine translation机器翻译,中文翻英文):

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM

tokenizer = AutoTokenizer.from_pretrained("Helsinki-NLP/opus-mt-zh-en")

model = AutoModelForSeq2SeqLM.from_pretrained("Helsinki-NLP/opus-mt-zh-en")

 提供的代码只是如何下载模型的代码,如果还要简单测试的话,需要自己编写代码进行测试

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM, pipeline

tokenizer = AutoTokenizer.from_pretrained("Helsinki-NLP/opus-mt-zh-en")

model = AutoModelForSeq2SeqLM.from_pretrained("Helsinki-NLP/opus-mt-zh-en")

# Elena
translator = pipeline("translation", model=model, tokenizer=tokenizer)
results = translator("我是一名研究员")
print(results)

 结果如图

 *注意:这里要求库,安装命令如下

#必须安装包
pip install transformers
pip install sentencepiece

#建议安装
pip install sacremoses

问题与解决

【1】windows系统,anaconda虚拟环境中,pip安装l出错

 Could not build wheels for soxr which use PEP 517 and cannot be installed directly

python -m pip install --upgrade pip
python -m pip install --upgrade setuptools

 更新后如图

 ERROR: Could not build wheels for soxr, which is required to install pyproject.toml-based projects

安装对应的whl文件

下载并安装对应的whl文件,可以通过以下地址下载。
Unofficial Windows Binaries for Python Extension Packages

获得whl文件后,直接 pip install 【whl文件绝对路径】
然后就可以装成功了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/513250.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

强人工智能时代,区块链还有戏吗?

最近很多人都在问我,ChatGPT 把 AI 又带火了,区块链和 Web3 被抢了风头,以后还有戏吗?还有比较了解我的朋友问,当年你放弃 AI 而选择区块链,有没有后悔? 这里有一个小背景。2017 年初我离开 IBM…

uni-app两个入口模块(客户端和用户端)

思路:使用vuex对小程序进行登录状态管理,采用集中式存储管理应用的登录状态 Vuex 是什么? | Vuex 效果: 新建store文件夹,在文件夹中新建一个index.js文件和一个modules文件夹,modules文件夹中新建一个st…

【历史上的今天】5 月 11 日:Dijkstra 算法开发者诞生;电子表格软件的开山鼻祖;机器狗 AIBO 问世

整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来。 今天是 2023 年 5 月 11 日,在 1995 年的今天,我国成为第六个研制成功磁悬浮列车的国家。磁悬浮列车利用“同性相斥,异性相吸”的原理&…

Linux基础学习---2、系统管理、帮助命令、文件目录类命令

1、系统管理 1.1 Linux中的进程和服务 计算机中,一个正在执行的程序或命令。被叫做“进程”(Process)。 启动之后一直存在、常驻内存的进程,一般称做“服务”(Service)。1.2 systemctl(CentOS…

以playwright脚本为例,详解Python with as处理异常的原理

大家在做playwright自动化测试时,一定会遇到下面的写法 with sync_playwright() as p:自动化代码 很多同学可能只是按照这种写法来编写项目的自动化测试代码,对于具体细节可能并不了解,今天我来结合playwright讲解一下 Python中的 with ...…

大咖齐聚CCIG论坛——文档图像智能分析的产业前沿

目录 1 文档图像智能分析技术2 大咖齐聚CCIG20233 议题介绍3.1 从模式识别到类脑研究3.2 视觉-语言预训练模型演进及应用3.3 篡改文本图像的生成和检测3.4 智能文档处理在工业界的应用与挑战 4 观看入口&议程 1 文档图像智能分析技术 文档图像智能分析是指使用计算机视觉和…

推荐一款支持多种存储的程序AList(附上个人站点)

1、安装部署 1、一键脚本 仅适用于 Linux amd64/arm64 平台。 #安装 curl -fsSL "https://alist.nn.ci/v3.sh" | bash -s install#更新 curl -fsSL "https://alist.nn.ci/v3.sh" | bash -s update#卸载 curl -fsSL "https://alist.nn.ci/v3.sh&qu…

【react】特种兵之react.tsx列表页面搭建

目录 背景了解工程架构我可开始了啊新建一个页面怎么写?前端代码编写思路 感触 背景 方便系统运维、不用每次初始化数据都走数据订正 这是第一次毕业之后,用前端语言新建一个页面,过程自然是极其曲折。情绪也是跌宕起伏,从页面显…

无需代理客户端,轻松实现虚拟机备份!

21世纪的虚拟化技术为企业提供了极大的便利和成本节约。它允许企业通过管理程序创建虚拟机以在单个主机上运行多个不同的操作系统,从而充分利用计算资源并节省架构和管理成本。 随着组织将其业务迁移到虚拟化平台,执行数据保护的方法也随之改变。虚拟机…

重视企业缺少成本票问题!合理利用税收优惠政策降低企业所得税!

重视企业缺少成本票问题!合理利用税收优惠政策降低企业所得税! 业务是流程,财税是结果,税收问题千千万,关注《税算盘》来帮你找答案。 很多企业在成立的初期会出现对票据管理不严格的情况,前期影响也不是…

精选博客系列|VMware Tanzu Mission Control增强策略功能,让Kubernetes的安全性更加灵活

随着分布式系统日益复杂,定义和实施 Kubernetes 集群的策略以确保环境的安全性、可靠性和合规性 —— 当然也是为了构建可扩展性的支撑结构,变得至关重要。 因此,我们很高兴宣布 VMware Tanzu Mission Control 现在有了更多的策略相关的改进…

C# webservice 接收json数据 接口返回 远程服务器返回错误: (500) 内部服务器错误

C# post 调用webservice 服务端接口,会返回上面那个错误,8成是发送的数据和接口不符合造成的。有2种情况 第一种情况如下:如果类型是默认request.ContentType "application/x-www-form-urlencoded";这个类型 那么你发送数据和被…

基于趋动云部署B站大V秋葉aaaki的Stable Diffusion整合包v4--linux版

B站大V秋葉aaaki的Stable Diffusion整合V4版发布了,集成度比较高,在windows下解压缩直接就可以使用,整合的非常好。但是笔人没有RTX4090这样级别的显卡,又希望有个高速运行的效果。 所以索性到云GPU主机上来用秋叶aaaki的Stable …

windows机制初探

Windows内存管理 EPROCESS结构体:在内核中表示一个进程 VAD树 二叉树,存储进程在内核层申请的虚拟内存信息 (x86 EPROCESS0x11c) (x64 EPROCESS0x7d8)指向VadRoot(VAD树) 可以看到两种内存:Private(私有内存)、 Mapped(映射内存) 私有内…

Elasticsearch 入门

Elasticsearch 是一种开源搜索引擎,它基于 Apache Lucene 构建,提供了一个分布式、多租户、全文搜索和分析引擎。Elasticsearch 可以处理海量数据,能够快速、准确地搜索、分析和可视化数据。 Elasticsearch 最初是为了解决日志搜索和分析而开…

2018年下半年 软件设计师 答案及详解

2018年下半年 软件设计师 答案详解 主要记录刷题相关笔记,方便日后温习!!! 一、选择题 CPU 在执行指令的过程中,会自动修改_____的内容,以使其保存的总是将要执行的下一条指令的地址。 A.指令寄存器B.程…

makefile 变量的扩展

文章目录 前言一、环境变量(全局变量)二、目标变量(局部变量)三、模式变量总结 前言 一、环境变量(全局变量) Makefile 中的环境变量,是指在执行 Makefile 时,从外部传入 Make 命令…

m4a音频怎么转换成mp3?

m4a音频怎么转换成mp3?如果你遇到了m4a音频格式的文件,但却无法在音频播放器中打开它,通常我们会将其转换成mp3格式。因为M4A属于苹果专用的音频格式,而MP3则是一种通用音频格式。M4A属于高品质压缩类型的音乐文件,而M…

Django框架之使用Session保持HTTP状态

HTTP协议是无状态的,每次请求都是新的请求; 客户端与服务器端的一次通信就是一次会话。 可使用cookie和session在客户端或者服务端存储有关会话的数据,来进行状态保持; cookie使用在上篇。本篇是使用session进行状态保持及使用Red…

外观数列----2023/5/11

外观数列----2023/5/11 给定一个正整数 n ,输出外观数列的第 n 项。 「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。 你可以将其视作是由递归公式定义的数字字符串序列: countAndSay(1) “1”…