2021-03-15 kaggle上Speech-Transformer项目问题

注册Kaggle账户,可以用gmail,或者其他邮箱,国内注册验证码显示不出,可用谷歌访问助手注册
(https://www.kaggle.com)

上传数据集

上传过程较慢,也需要谷歌访问助手之类工具辅助
上传单个压缩文件成功之后

添加数据集到项目输入

但是input目录下只读权限,没办法解压,所以考虑其他办法解决

解压缩文件到working目录

解压缩完成之后,保存所有包括output结果


保存版本
查看版本详细情况
查看output情况

可以将output结果上传到Dataset,但是名称不能与之前数据集重复!

将解压后输出结果上传到data

最后仍然报错!提示test目录已存在


错误信息
可以将输出结果当作data导入

最后发现已经有人共享了aishell数据集,可以直接搜索应用
https://www.kaggle.com/peterhu/speech_data

将src目录下多个py源码上传至dataset,notebook调用的时候加入以下代码,即可指定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)
 in 
     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 
     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内运行,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/

未设置联网功能,无法安装使用第三方库


需要手机验证

验证时,需选择国家如中国(+86),然后填手机号,等待验证码。(人机验证码可能也需要借助谷歌助手),完成之后需要打开网络开关。


验证完成之后GPU也可以设置使用了
GPU设置

TPU设置

安装第三方库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文件可以通过数据集上传,但是无法修改。
暂时想到的办法是本地修改源码,然后通过上传数据集,更新原版本替换原有源码;之后再将其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.

设定Speech-Transformer/egs/aishell/目录下软链接

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

根据目录下INSTALL文件说明,先进入tools进行make,然后再进入src进行make,成功完成之后,生成fbank特征提取所需工具compute-fbank-feats、copy-feats等等。
如果不进行make,源码中只有.cc文件,执行fbank特征提取时会找不到所需工具。

切换到tools目录下(此处cd前面用%,而不用!,!表示在子shell内运行,下一行会失效)

!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%,预计提供的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中的数据(更新到最新版本),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

改变系统环境变量($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'

执行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 

有些文件可能会没有执行权限,通过设置赋予可执行权限

!chmod +x /kaggle/working/Speech-Transformer/* -R
中途报错

权限修改完之后运行成功

Data Preparation
Feature Generation

stage 2步骤出现错误,未发现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工具,特征提取步骤出现点问题,所以没有保存下来,可以将kaldi结果上传至数据集,供另一个工程作为dataset使用。

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

可以通过点击显示版本,进行版本管理

点击显示版本
可以对不同版本进行修改
保存出错的版本,可以中途取消
进入Viewer
点击版本
转圈显示正在进行中

还可以通过Select Diff来对比不同版本的不同之处。

选中版本9与版本7对比
显示版本的不同之处

你可能感兴趣的:(2021-03-15 kaggle上Speech-Transformer项目问题)