Whisper-AT:抗噪語音識別模型(Whisper)實現通用音頻事件標記(Audio Tagger)

1.概述:

? ? ? ?Whisper-AT 是建立在 Whisper 自動語音識別(ASR)模型基礎上的一個模型。Whisper 模型使用了一個包含 68 萬小時標注語音的大規模語料庫進行訓練,這些語料是在各種不同條件下錄制的。Whisper 模型以其在現實背景噪音(如音樂)下的魯棒性著稱。盡管如此,其音頻表示并非噪音不變,而是與非語音聲音高度相關。這意味著 Whisper 在識別語音時會依據背景噪音類型進行調整

主要發現:

  1. 噪音變化的表示:

    • Whisper 的音頻表示編碼了豐富的非語音背景聲音信息,這與通常追求噪音不變表示的 ASR 模型目標不同。
    • 這一特性使得 Whisper 能夠在各種噪音條件下通過識別和適應噪音來保持其魯棒性。
  2. ASR 和音頻標簽的統一模型:

    • 通過凍結 Whisper 模型的骨干網絡,并在其上訓練一個輕量級的音頻標簽模型,Whisper-AT 可以在一次前向傳遞中同時識別音頻事件和語音文本,額外的計算成本不足 1%。
    • Whisper-AT 在音頻事件檢測方面表現出色,同時保持了 Whisper 的 ASR 功能。

技術細節:

  1. Whisper ASR 模型:

    • Whisper 使用基于 Transformer 的編碼器-解碼器架構。
    • 其訓練集包括從互聯網上收集的 68 萬小時音頻-文本對,涵蓋了廣泛的環境、錄音設置、說話人和語言。
  2. 抗噪機制:

    • Whisper 的魯棒性并非通過噪音不變性實現,而是通過在其表示中編碼噪音類型。
    • 這一機制使得 Whisper 能夠根據背景噪音類型來轉錄文本,從而在嘈雜條件下表現優越。
  3. 構建 Whisper-AT:

    • Whisper-AT 是通過在 Whisper 模型上添加新的音頻標簽層而構建的,未修改其原始權重。

    • 探索了不同的音頻標簽層集成方法,包括:
      • Last-MLP:對 Whisper 的最后一層表示進行時間均值池化,然后應用線性層。
      • WA-MLP:對所有層的表示進行加權平均,然后應用線性層。
      • WA-Tr:用時間 Transformer 層替換線性層。
      • TL-Tr:使用時間和層次 Transformer 處理所有層的表示。
  4. 效率考量:

    • 為保持計算效率,采用了各種策略,例如減少表示的序列長度,并在應用音頻標簽 Transformer 之前可選地降低維度。

性能:

  • Whisper-AT 在 AudioSet 上達到了 41.5 的 mAP,略低于獨立的音頻標簽模型,但處理速度顯著更快,超過 40 倍。

意義:

  • 能夠同時執行 ASR 和音頻標簽任務,使得 Whisper-AT 非常適合于視頻轉錄、語音助手和助聽器系統等應用場景,在這些場景中需要同時進行語音文本和聲學場景分析。

2.代碼:

? ? ? ?欲了解詳細的實現和實驗結果,請訪問 GitHub: github.com/yuangongnd/whisper-at.下面是對 Whisper-AT 代碼的詳細解釋。我們將逐步解析其主要組件和功能,幫助理解其工作原理。

安裝和準備

首先,確保你已經安裝了 Whisper 和相關的依賴項:

pip install git+https://github.com/openai/whisper.git
pip install torch torchaudio
pip install transformers datasets

代碼結構

簡要 Whisper-AT 的代碼結構如下所示:

Whisper-AT/
│
├── whisper_at.py
├── train.py
├── dataset.py
├── utils.py
└── README.md

whisper_at.py - Whisper-AT 模型

import torch
import torch.nn as nn
import whisperclass WhisperAT(nn.Module):def __init__(self, model_name="base"):super(WhisperAT, self).__init__()self.whisper = whisper.load_model(model_name)self.audio_tagging_head = nn.Linear(self.whisper.dims, 527)  # 527 是 AudioSet 的標簽數def forward(self, audio):# 獲取 Whisper 的中間表示with torch.no_grad():features = self.whisper.encode(audio)# 通過音頻標簽頭audio_tagging_output = self.audio_tagging_head(features.mean(dim=1))return audio_tagging_output

train.py - 訓練腳本

import torch
from torch.utils.data import DataLoader
from dataset import AudioSetDataset
from whisper_at import WhisperAT
import torch.optim as optim
import torch.nn.functional as Fdef train():# 加載數據集train_dataset = AudioSetDataset("path/to/training/data")train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)# 初始化模型model = WhisperAT()model.train()# 定義優化器optimizer = optim.Adam(model.parameters(), lr=1e-4)for epoch in range(10):  # 假設訓練10個epochfor audio, labels in train_loader:optimizer.zero_grad()# 前向傳播outputs = model(audio)# 計算損失loss = F.binary_cross_entropy_with_logits(outputs, labels)# 反向傳播和優化loss.backward()optimizer.step()print(f"Epoch {epoch}, Loss: {loss.item()}")if __name__ == "__main__":train()

dataset.py - 數據集處理

import torch
from torch.utils.data import Dataset
import torchaudioclass AudioSetDataset(Dataset):def __init__(self, data_path):self.data_path = data_pathself.audio_files = [...]  # 這里假設你有一個包含所有音頻文件路徑的列表self.labels = [...]  # 這里假設你有一個包含所有對應標簽的列表def __len__(self):return len(self.audio_files)def __getitem__(self, idx):# 加載音頻audio, sample_rate = torchaudio.load(self.audio_files[idx])# 獲取對應標簽labels = torch.tensor(self.labels[idx])return audio, labels

utils.py - 輔助功能

import torchdef save_model(model, path):torch.save(model.state_dict(), path)def load_model(model, path):model.load_state_dict(torch.load(path))model.eval()

詳細解釋

  1. Whisper-AT 模型 (whisper_at.py):

    • WhisperAT 類繼承自 nn.Module,初始化時加載 Whisper 模型,并在其上添加一個線性層用于音頻標簽任務。
    • forward 方法首先調用 Whisper 模型的 encode 方法獲取音頻特征,然后將這些特征傳遞給音頻標簽頭(線性層)以生成標簽輸出。
  2. 訓練腳本 (train.py):

    • train 函數中,數據集被加載并傳遞給 DataLoader。
    • 模型實例化并設置為訓練模式。
    • 定義了 Adam 優化器和二進制交叉熵損失函數。
    • 在訓練循環中,音頻輸入通過模型生成輸出,計算損失并執行反向傳播和優化。
  3. 數據集處理 (dataset.py):

    • AudioSetDataset 類繼承自 Dataset,實現了音頻數據和標簽的加載。
    • __getitem__ 方法加載音頻文件并返回音頻張量和對應標簽。
  4. 輔助功能 (utils.py):

    • 包含保存和加載模型狀態的函數,方便模型的持久化和恢復。

? ? ? ?通過以上代碼結構和解釋,可以幫助理解 Whisper-AT 的實現和訓練流程。可以根據需要擴展這些代碼來適應具體的應用場景和數據集。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/19557.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/19557.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/19557.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

探究 Meme 的金融與社交屬性

原文標題:《A Social and Financial Study of Memecoins》撰文:Andrew Hong編譯:Chris,Techub News 每一個市場周期都伴隨著 Meme 代幣的出現。一群人圍繞著某個 Meme 集結起來,暫時抬高了某個資產的價格(從…

Github Copilot登錄賬號,完美支持chat

Github Copilot 代碼補全等功能,提高寫代碼的效率 https://web.52shizhan.cn/activity/copilot 登錄授權后,已經可以使用,完美。如圖

flutter 自動生成靜態資源的引用

flutter_gen庫的使用 第一步、項目yarml中dev_dependencies 新增一下flutter_gen_runner 和build_runner dev_dependencies:build_runner: nullflutter_gen_runner: null # flutter packages pub run build_runner build 第二步、新增配置信息 和(dev_dependencies 同級的) …

大話設計模式學習筆記

目錄 工廠模式策略模式備忘錄模式(快照模式)代理模式單例模式迭代器模式訪問者模式觀察者模式解釋器模式命令模式模板方法模式橋接模式適配器模式外觀模式享元模式原型模式責任鏈模式中介者模式裝飾模式狀態模式 工廠模式 策略模式 核心:封裝…

03.k8s常用的資源

3.k8s常用的資源 3.1 創建pod資源 k8s yaml的主要組成 apiVersion: v1 api版本 kind: pod 資源類型 metadata: 屬性 spec: 詳細上傳nginx鏡像文件,并且上傳私有倉庫里面 k8s_pod.yaml apiVersion: v1 kind: Pod metadata:name: nginxlabels:app: we…

prometheus 標簽選擇器 正則表達式 = 、=~

Prometheus expression是一種用于查詢和操作Prometheus時間序列數據的查詢語言。它具有一套豐富的函數和運算符,可以用于提取、聚合和轉換時間序列數據。 正則表達式在Prometheus expresion中也被廣泛使用,可以用于匹配和過濾時間序列。 Prometheus ex…

Tuxera Ntfs For Mac 2023的具體使用方法

大家都知道由于操作系統的原因,在蘋果電腦上不能夠讀寫NTFS磁盤,但是,今天小編帶來的這款tuxera ntfs 2024 mac 破解版,完美的解決了這個問題。這是一款在macOS平臺上使用的磁盤讀寫軟件,能夠實現蘋果Mac OS X系統讀寫…

CSS實驗性功能及CSS4特性

CSS4目前仍然是一個寬泛的概念,因為CSS的發展通常是通過一系列逐步完善的模塊來進行的,而不是一次性推出一個全新的“第四代”。許多所謂的“CSS4”特性實際上是正在開發或已經草案階段的CSS模塊,它們可能在未來的CSS規范中被正式采納。 選擇器4: :is() 和 :where() 偽類允…

Docker的數據管理(數據卷+數據卷容器)

文章目錄 一、Docker的數據管理1、概述2、主要的技術(三種數據掛載方式)2.1、數據卷(Volumes)2.2、綁定掛載(Bind mounts)2.3、tmpfs掛載(Tmpfs mounts)2.4、之間的關系(…

偏微分方程算法之二階雙曲型方程交替方向隱格式(變形一)

目錄 一、研究目標 二、變形 三、算例實現 四、計算結果 本專欄介紹了二階雙曲型偏微分方程的交替方向隱格式的介紹和推導(鏈接如下),本節將進一步研究二維雙曲型方程初邊值問題其它的交替方向隱格式。

示例丨醫學、醫藥類查新點填寫參考案例

根據《科技查新技術規范》GB/T 32003-2015,科學技術要點是必須要包含查新點內容的,而查新點就是科學技術要點中能夠體現查新項目新穎性和技術進步的技術特征點。 在日常查新工作的接待中,我們發現醫學、醫藥類查新合同上查新點的書寫&#x…

計算機tcp/ip網絡通信過程

目錄 (1)同一網段兩臺計算機通信過程 (2)不同網段的兩臺計算機通信過程 (3)目的主機收到數據包后的解包過程 (1)同一網段兩臺計算機通信過程 如果兩臺計算機在同一個局域網中的同…

算法(九)希爾排序

文章目錄 希爾排序簡介代碼實現 希爾排序簡介 希爾排序(shell sort)選定一個小于N(數列長度)的整數gap作為第一增量,然后將所有距離為gap的元素分成一組,然后對每一組的元素進行插入排序。然后再取一個比前…

(1+X)Java程序設計高級(一)

Throwable:異常的基類,所有異常都繼承自 java.lang.Throwable 類,Throwable 類有兩個直接子類:Error 類和 Exception 類。Error:是 Java 應用程序本身無法恢復的嚴重錯誤,應用程序不需要捕獲、處理這些嚴重…

7.1 Go 錯誤的概念

💝💝💝歡迎蒞臨我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內容和知識,也可以暢所欲言、分享您的想法和見解。 推薦:「stormsha的主頁」…

【SQL每日一練】查詢二進制樹節點

文章目錄 題目一、題析二、題解1.MySQL/SqlServer2.Oracle 題目 有一個表BST,其中包含兩列:N和P,其中N表示二進制樹中節點的值,P是N的父級。 編寫一個查詢,以查找按節點值排序的二進制樹的節點類型。為每個節點輸出以…

迅狐跨境電商系統源碼:技術棧與多端集成

隨著全球化貿易的不斷深入,跨境電商系統源碼成為了連接不同國家和地區消費者與商家的重要橋梁。本文將探討跨境電商系統源碼的技術棧以及如何通過多端集成來提升用戶體驗。 技術棧概覽 跨境電商系統源碼的技術棧是構建高效、穩定平臺的基礎。以下是構建跨境電商系…

IP65 IP45 IP68等等數字防護等級

第一個數字的代表意義 : 0 表示無防護 ,對外界的人或物無特殊之防護 1. 表示防止大于50mm的固體物體侵入 ,防止人體(如手掌)因意外而接觸,內部之零件。防止較大尺寸(直徑大于50mm)的…

Oracle數據塊如何存儲真實數據

上周休假了幾天,頹廢了,沒有輸出。今天寫一點內容。 先拋出一個問題。表中的數據在Oracle數據塊中是如何存儲的呢?今天簡單說一下這個問題。通常數據庫中的表會存儲字符,數字,日期 這3種常見的數據類型。下面的例子就用這3種數據類型作說明 首先,Oracle數據塊底層存儲這…

Github 2024-05-31開源項目日報 Top10

根據Github Trendings的統計,今日(2024-05-31統計)共有10個項目上榜。根據開發語言中項目的數量,匯總情況如下: 開發語言項目數量Python項目4TypeScript項目3Jupyter Notebook項目2Vue項目1Cuda項目1Elixir項目1簡單、純凈的C/CUDA中的LLM培訓 創建周期:3 天開發語言:Cuda…