操:14 分鐘微調(diào)出一個(gè)環(huán)境音識(shí)別模型)
Transformers 音頻分類實(shí)操14 分鐘微調(diào)出一個(gè)環(huán)境音識(shí)別模型【免費(fèi)下載鏈接】transformers Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/tra/transformers本文用 Transformers 庫完成一個(gè)環(huán)境音識(shí)別任務(wù)把預(yù)訓(xùn)練音頻模型 wav2vec2-base 微調(diào)成能區(qū)分門鈴、電器、交通噪聲等場(chǎng)景聲音的分類模型。官方示例在單張 V100 上約 14 分鐘跑完SUPERB 關(guān)鍵詞子集上的準(zhǔn)確率達(dá)到 98.26%。下面帶你從裝依賴到跑通驗(yàn)證全程不需要自己寫特征提取代碼這些庫里都有現(xiàn)成實(shí)現(xiàn)。先看效果一次調(diào)用分出聲音類別 全文的最終形態(tài)就是兩行代碼用pipeline(audio-classification, model./wav2vec2-ks)加載你微調(diào)好的模型再傳給它一個(gè) wav 文件返回的是一組標(biāo)簽 置信度比如[{label: turn_on, score: 0.969}, {label: off, score: 0.012}, ...]——模型以 97% 的把握判定聽到的是開啟聲。輸入一段錄音輸出一個(gè)場(chǎng)景標(biāo)簽這就是環(huán)境音識(shí)別系統(tǒng)的完整閉環(huán)。3 分鐘搞懂原理wav2vec2 怎么聽聲音一句話總結(jié)預(yù)訓(xùn)練模型先聽過大量無標(biāo)注音頻你再把一個(gè)分類頭接上去讓它記住你的類別。拆開看是三個(gè)角色wav2vec2-base 是在數(shù)百小時(shí)無標(biāo)注音頻上自監(jiān)督預(yù)訓(xùn)練的模型可以理解為它已經(jīng)會(huì)聽特征提取器是個(gè)翻譯官把原始波形統(tǒng)一轉(zhuǎn)成 16kHz 的數(shù)值特征再交給模型分類頭是最后新加的一小塊網(wǎng)絡(luò)輸出端有 N 個(gè)位置正好對(duì)應(yīng)你數(shù)據(jù)集里的 N 個(gè)類別。默認(rèn)配置下只訓(xùn)練這個(gè)新頭、凍結(jié)預(yù)訓(xùn)練部分所以數(shù)據(jù)少也能很快收斂。下面這張廚房圖就是典型的應(yīng)用場(chǎng)景之一模型做的事情相當(dāng)于聽聲辨場(chǎng)景。想深入細(xì)節(jié)可以看官方音頻分類任務(wù)文檔。從零到跑通微調(diào)你的第一個(gè)環(huán)境音模型第 1 步2 分鐘裝好音頻依賴環(huán)境要求 Python 3.10、PyTorch 2.5。音頻相關(guān)依賴被打包成audio擴(kuò)展一次裝全git clone https://gitcode.com/GitHub_Trending/tra/transformers cd transformers pip install -e .[audio] pip install datasets[audio] evaluatesetup.py 里定義的 torchaudio、librosa 等音頻依賴由第一條命令帶出datasets和evaluate分別負(fù)責(zé)加載音頻數(shù)據(jù)和計(jì)算準(zhǔn)確率。第 2 步備好數(shù)據(jù)加載 wav2vec2示例腳本支持兩種數(shù)據(jù)源Hub 上的數(shù)據(jù)集名或本地一份列出音頻路徑與標(biāo)簽的 CSV。模型側(cè)只有幾行核心代碼——建特征提取器、加載模型并指定類別數(shù)、凍結(jié)預(yù)訓(xùn)練部分from transformers import AutoFeatureExtractor, AutoModelForAudioClassification processor AutoFeatureExtractor.from_pretrained(facebook/wav2vec2-base) model AutoModelForAudioClassification.from_pretrained( facebook/wav2vec2-base, num_labels2, ) model.freeze_feature_encoder()num_labels填你數(shù)據(jù)集的類別數(shù)重采樣、隨機(jī)裁剪等預(yù)處理都由腳本代勞完整參數(shù)說明見音頻分類示例目錄。第 3 步跑官方示例驗(yàn)證訓(xùn)練先用小數(shù)據(jù)集驗(yàn)證環(huán)境。?? 官方示例在 SUPERB 的關(guān)鍵詞子集4 類開關(guān)指令上跑關(guān)鍵詞檢測(cè)單張 V100 約 14 分鐘python examples/pytorch/audio-classification/run_audio_classification.py \ --model_name_or_path facebook/wav2vec2-base \ --dataset_name superb --dataset_config_name ks \ --max_length_seconds 1 --num_train_epochs 5 \ --per_device_train_batch_size 32 --fp16 \ --do_train --do_eval --output_dir wav2vec2-ks跑完日志里會(huì)輸出評(píng)測(cè)準(zhǔn)確率模型保存在--output_dir指向的目錄。換成自己的場(chǎng)景把--dataset_name換成--train_file指向本地 CSV 即可。最容易踩的 3 個(gè)坑1. 類別數(shù)不匹配直接報(bào)錯(cuò)。預(yù)訓(xùn)練模型的分類頭對(duì)應(yīng) 5 個(gè)類別你的數(shù)據(jù)集類別數(shù)不同時(shí)加載階段就會(huì)報(bào) size 不匹配。加一個(gè)--ignore_mismatched_sizes參數(shù)分類頭會(huì)按你指定的數(shù)量重建錯(cuò)誤消失。2. 采樣率沒對(duì)齊。wav2vec2-base 只認(rèn) 16kHz 的音頻示例用cast_column對(duì)音頻列統(tǒng)一重采樣如果你繞過它直接喂其他采樣率的原始音頻音調(diào)會(huì)整體偏移識(shí)別準(zhǔn)確率隨之下降。3. 長音頻直接塞進(jìn)去。訓(xùn)練時(shí)每條音頻會(huì)被隨機(jī)裁到max_length_seconds默認(rèn) 20 秒這既是數(shù)據(jù)增強(qiáng)也劃定了模型單次聽的窗口。如果你的錄音動(dòng)輒一分鐘且需要實(shí)時(shí)處理把這個(gè)值調(diào)小或自己做滑窗切分否則單條推理耗時(shí)會(huì)成倍拉長。想更進(jìn)一步換 2 層結(jié)構(gòu)的ntu-spml/distilhubert做骨干官方示例約 11 分鐘跑完準(zhǔn)確率只降約 1 個(gè)百分點(diǎn)。數(shù)據(jù)量充足時(shí)取消凍結(jié)特征編碼器讓全網(wǎng)絡(luò)一起訓(xùn)練通常還能再漲一點(diǎn)精度。做量化或?qū)С?ONNX 壓縮模型體積部署到邊緣設(shè)備。用 FastAPI 把 pipeline 包成 HTTP 接口對(duì)外服務(wù)模型側(cè)代碼零改動(dòng)。--output_dir里保存的就是可用的環(huán)境音識(shí)別模型推理時(shí)一行pipeline(audio-classification)調(diào)用即可拿到標(biāo)簽與置信度家里的門鈴、街邊的施工聲只要有帶標(biāo)簽的錄音同一套腳本都能復(fù)用。【免費(fèi)下載鏈接】transformers Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/tra/transformers創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考