2021-03-15 kaggle上Speech-Transformer項目問題

注冊Kaggle賬戶,可以用gmail,或者其他郵箱,國內(nèi)注冊驗證碼顯示不出,可用谷歌訪問助手注冊
https://www.kaggle.com

上傳數(shù)據(jù)集

上傳過程較慢,也需要谷歌訪問助手之類工具輔助
上傳單個壓縮文件成功之后

添加數(shù)據(jù)集到項目輸入

但是input目錄下只讀權(quán)限,沒辦法解壓,所以考慮其他辦法解決

解壓縮文件到working目錄

解壓縮完成之后,保存所有包括output結(jié)果


保存版本
查看版本詳細情況
查看output情況

可以將output結(jié)果上傳到Dataset,但是名稱不能與之前數(shù)據(jù)集重復(fù)!

將解壓后輸出結(jié)果上傳到data

最后仍然報錯!提示test目錄已存在


錯誤信息
可以將輸出結(jié)果當作data導入

最后發(fā)現(xiàn)已經(jīng)有人共享了aishell數(shù)據(jù)集,可以直接搜索應(yīng)用
https://www.kaggle.com/peterhu/speech_data

將src目錄下多個py源碼上傳至dataset,notebook調(diào)用的時候加入以下代碼,即可指定import搜索路徑

import sys
sys.path.append(r'../input/speech-transformer-project/Speech-Transformer/src/bin')
sys.path.append(r'../input/speech-transformer-project/Speech-Transformer/src/data')
sys.path.append(r'../input/speech-transformer-project/Speech-Transformer/src/solver')
sys.path.append(r'../input/speech-transformer-project/Speech-Transformer/src/transformer')
sys.path.append(r'../input/speech-transformer-project/Speech-Transformer/src/utils')

運行過程中報錯:

---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-1-6e16a70dc4aa> in <module>
     14 #from thop import profile
     15 
---> 16 from data import AudioDataLoader, AudioDataset
     17 from decoder import Decoder
     18 from encoder import Encoder

/kaggle/input/speech-transformer-project/Speech-Transformer/src/data/data.py in <module>
     15 import torch.utils.data as data
     16 
---> 17 import kaldi_io
     18 from utils import IGNORE_ID, pad_list
     19 

ModuleNotFoundError: No module named 'kaldi_io'

kaggle需要安裝第三方庫,在console輸入:
pip install kaldiio (如果在notebook內(nèi)運行,pip前面需要加“!”)

WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/kaldiio/

未設(shè)置聯(lián)網(wǎng)功能,無法安裝使用第三方庫


需要手機驗證

驗證時,需選擇國家如中國(+86),然后填手機號,等待驗證碼。(人機驗證碼可能也需要借助谷歌助手),完成之后需要打開網(wǎng)絡(luò)開關(guān)。


驗證完成之后GPU也可以設(shè)置使用了
GPU設(shè)置

TPU設(shè)置

安裝第三方庫kaldiio,重啟kernel仍然報錯,好像是需要安裝kaldi_io?


更改notebook的默認工作目錄

# change working directory 
import os

if os.path.basename(os.getcwd()) == 'working':
    os.chdir('./Speech-Transformer/egs/aishell/')
print('current working directory is {}'.format(os.getcwd()))

# 獲取當前路徑,列出文件
print(os.getcwd())
print(os.listdir(os.getcwd()))

由于kaggle只能編輯ipynb文件,而py和sh文件可以通過數(shù)據(jù)集上傳,但是無法修改。
暫時想到的辦法是本地修改源碼,然后通過上傳數(shù)據(jù)集,更新原版本替換原有源碼;之后再將其cp到working目錄下運行?

下載kaldi

!cd /kaggle/working
!git clone https://github.com/kaldi-asr/kaldi.git
Cloning into 'kaldi'...
remote: Enumerating objects: 11, done.
remote: Counting objects: 100% (11/11), done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 113300 (delta 2), reused 10 (delta 2), pack-reused 113289
Receiving objects: 100% (113300/113300), 121.03 MiB | 19.96 MiB/s, done.
Resolving deltas: 100% (87516/87516), done.

設(shè)定Speech-Transformer/egs/aishell/目錄下軟鏈接

!ln -s /kaggle/working/kaldi/egs/wsj/s5/steps ./
!ln -s /kaggle/working/kaldi/egs/wsj/s5/utils ./

根據(jù)目錄下INSTALL文件說明,先進入tools進行make,然后再進入src進行make,成功完成之后,生成fbank特征提取所需工具compute-fbank-feats、copy-feats等等。
如果不進行make,源碼中只有.cc文件,執(zhí)行fbank特征提取時會找不到所需工具。

切換到tools目錄下(此處cd前面用%,而不用!,!表示在子shell內(nèi)運行,下一行會失效)

!pwd
%cd /kaggle/working/kaldi/tools
!ls

檢查依賴情況,更加提示安裝依賴

!extras/check_dependencies.sh
!apt -y install automake autoconf sox gfortran subversion

默認安裝MKL庫,報錯

!extras/install_mkl.sh
Certificate verification failed: The certificate is NOT trusted. The certificate issuer is unknown.  Could not handshake: Error in the certificate verification. [IP: 184.30.128.247 443]

改用安裝openblas替代

!extras/install_openblas.sh
# 編譯tools,kaggle最高CPU運行400%,預(yù)計提供的cpu為4核,此處可改為4
!make -j 8

切換到src目錄

!pwd
%cd /kaggle/working/kaldi/src
!ls

編譯步驟(增加 --mathlib=OPENBLAS,默認不需要)

!./configure --shared --mathlib=OPENBLAS
!make depend -j 8
!make -j 8

編譯成功完成!

將input中的數(shù)據(jù)(更新到最新版本),copy到working目錄下

!cp -r /kaggle/input/speech-transformer-project/Speech-Transformer /kaggle/working/
!ls

切換默認工作目錄

%cd /kaggle/working
# change working directory 
import os

if os.path.basename(os.getcwd()) == 'working':
    os.chdir('./Speech-Transformer/egs/aishell/')
print('current working directory is {}'.format(os.getcwd()))

替換 steps utils 目錄為kaldi軟鏈接

!rm -R steps utils
!ln -s /kaggle/working/kaldi/egs/wsj/s5/steps /kaggle/working/Speech-Transformer/egs/aishell/
!ln -s /kaggle/working/kaldi/egs/wsj/s5/utils /kaggle/working/Speech-Transformer/egs/aishell/
!ls -l

改變系統(tǒng)環(huán)境變量($PATH)

import os
os.environ['KALDI_ROOT'] = '/kaggle/working/kaldi'
os.environ['PATH'] = '/kaggle/working/kaldi/src/bin:/kaggle/working/kaldi/src/lmbin:/kaggle/working/kaldi/src/fstbin:/kaggle/working/kaldi/src/gmmbin:/kaggle/working/kaldi/src/kwsbin:/kaggle/working/kaldi/src/latbin:/kaggle/working/kaldi/src/featbin:/kaggle/working/kaldi/src/fgmmbin:/kaggle/working/kaldi/src/sgmm2bin:/kaggle/working/kaldi/src/chainbin/:/kaggle/working/kaldi/src/nnetbin/:/kaggle/working/kaldi/src/nnet2bin:/kaggle/working/kaldi/src/nnet3bin:/kaggle/working/kaldi/src/onlinebin:/kaggle/working/kaldi/src/online2bin:/kaggle/working/kaldi/src/ivectorbin:/kaggle/working/kaldi/tools/openfst-1.6.2/bin:/kaggle/working/kaldi/egs/wsj/s5/utils:/kaggle/working/kaldi/egs/wsj/s5/steps:/opt/conda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'

執(zhí)行run.sh

!chmod +x * -R
# !chmod +x */*.sh
!ls -l
!./run.sh --checkpoint 0 --stage 0 --visdom 0 --visdom_id "train test" --visdom_lr 0  --visdom_epoch 0 --LFR_m 1 --LFR_n 1 --batch_frames 1500 --batch-size 16 --print-freq 100 --num-workers 4 

有些文件可能會沒有執(zhí)行權(quán)限,通過設(shè)置賦予可執(zhí)行權(quán)限

!chmod +x /kaggle/working/Speech-Transformer/* -R
中途報錯

權(quán)限修改完之后運行成功

Data Preparation
Feature Generation

stage 2步驟出現(xiàn)錯誤,未發(fā)現(xiàn)bc命令

安裝bc命令,使用apt install,安裝之后bc在/usr/bin目錄下

# !pip install bc
!apt install bc

成功完成stage 0、1、2步,保存version。(Quick Save只保存當前快照,無法保存輸出文件)
打開Accelerator配置選擇GPU,會自動清除輸出文件,需提前保存version。

Creating Save & Run All指保存并run all ?

運行時間1個多小時,編譯了kaldi工具,特征提取步驟出現(xiàn)點問題,所以沒有保存下來,可以將kaldi結(jié)果上傳至數(shù)據(jù)集,供另一個工程作為dataset使用。

保存成功之后包含輸出文件

可以通過點擊顯示版本,進行版本管理

點擊顯示版本
可以對不同版本進行修改
保存出錯的版本,可以中途取消
進入Viewer
點擊版本
轉(zhuǎn)圈顯示正在進行中

還可以通過Select Diff來對比不同版本的不同之處。

選中版本9與版本7對比
顯示版本的不同之處
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容