1
2
3
import torch

print(torch.version.cuda)
1
2
3
4
import 	torch
import time
print(torch.__version__)
print(torch.cuda.is_available())
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
a = torch.randn(10000, 1000)
b = torch.randn(1000, 2000)

t0 = time.time()
c = torch.matmul(a, b)
t1 = time.time()
print(a.device, t1 - t0, c.norm(2))

device = torch.device('cuda')
a = a.to(device)
b = b.to(device)

t0 = time.time()
c = torch.matmul(a, b)
t2 = time.time()
print(a.device, t2 - t0, c.norm(2))

t0 = time.time()
c = torch.matmul(a, b)
t2 = time.time()
print(a.device, t2 - t0, c.norm(2))

参考文章

  1. 下载sox-14.4.1.tar.gz

🌟(不能简单通过pip install 来安装)

  1. 安装sox文件

  1)解压  tar -zxvf sox-14.4.1.tar.gz

  2)进入sox14.4.1目录中执行./configure

1
2
./configure --prefix=/ssd3/other/huangsj/sox_install
# 加上prefix,在自定义目录安装,不然机器环境太乱,会找不到

  3)执行 make命令

  4)执行make install命令

  1. 添加环境变量
1
2
3
4
5
vim ~/.bash_profile

export PATH=/ssd3/other/huangsj/sox_install/bin:$PATH

source ~/.bash_profile
  1. ok,再来运行一下 librispeech ./run.sh

参考文章

问题来源:Kaldi librispeech example:数据预处理脚本文件:

path = kaldi/egs/librispeech/s5/local/da ta_prep.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 双重for循环
#第一层循环,按说话人
for reader_dir in $(find -L $src -mindepth 1 -maxdepth 1 -type d | sort); do
reader=$(basename $reader_dir)
if ! [ $reader -eq $reader ]; then # not integer.
echo "$0: unexpected subdirectory name $reader"
exit 1;
fi

# 从说话人信息文件中提取性别
reader_gender=$(egrep "^$reader[ ]+\|" $spk_file | awk -F'|' '{gsub(/[ ]+/, ""); print tolower($2)}')
if [ "$reader_gender" != 'm' ] && [ "$reader_gender" != 'f' ]; then
echo "Unexpected gender: '$reader_gender'"
exit 1;
fi

#第二重for循环,按章节
for chapter_dir in $(find -L $reader_dir/ -mindepth 1 -maxdepth 1 -type d | sort); do
chapter=$(basename $chapter_dir)
if ! [ "$chapter" -eq "$chapter" ]; then
echo "$0: unexpected chapter-subdirectory name $chapter"
exit 1;
fi

find -L $chapter_dir/ -iname "*.flac" | sort | xargs -I% basename % .flac | \
awk -v "dir=$chapter_dir" '{printf "%s flac -c -d -s %s/%s.flac |\n", $0, dir, $0}' >>$wav_scp|| exit 1

chapter_trans=$chapter_dir/${reader}-${chapter}.trans.txt
[ ! -f $chapter_trans ] && echo "$0: expected file $chapter_trans to exist" && exit 1
cat $chapter_trans >>$trans

# NOTE: For now we are using per-chapter utt2spk. That is each chapter is considered
# to be a different speaker. This is done for simplicity and because we want
# e.g. the CMVN to be calculated per-chapter
awk -v "reader=$reader" -v "chapter=$chapter" '{printf "%s %s-%s\n", $1, reader, chapter}' \
<$chapter_trans >>$utt2spk || exit 1

# reader -> gender map (again using per-chapter granularity)
echo "${reader}-${chapter} $reader_gender" >>$spk2gender
done
done

命令语句解析

1
(find -L $src -mindepth 1 -maxdepth 1 -type d | sort)
1
2
># 使用格式
>find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
1
2
3
4
>和符号链接相关的选项:
-P 不跟踪符号链接(默认行为)
-L 当 find 检查或打印有关文件的信息时, 所使用的信息应取自链接指向的文件的属性, 而不是链接本身
-H 和 -L 参数刚好相反, 当 find 检查或打印有关文件的信息时, 所使用的信息应取自符号链接的属性
1
2
3
4
5
6
7
8
9
10
11
12
>EXPRESSIONS(表达式):
OPTIONS(选项):
-d、-depth 在查找文件时, 首先查找当前目录中的文件, 然后再在其子目录中查找
-maxdepth n find 查找目录的最大深度
-mindepth n find 从指定的目录的第几层深度开始查找
-mount 查找文件时不跨越文件系统的 mount 点
-follow 和 ``-``L 参数类似
-regextype 指定后面所使用的正则表达式语法, 默认为 emacs
posix-awk 类 awk 的正则表达式语法
posix-basic 基本正则表达式
posix-egrep 不使用正则表达式
posix-extended 扩展正则表达式
1
2
3
4
5
6
7
8
>-type
b 块设备
c 字符设备
d 目录
p 命名管道
f 文件
l 链接文件
s socket 文件

🌟 想起顾芯怡教的一招

1
hdfs dfs -ls     - hdfs://haruna/home/byte_arnold_hl_speech_asr/user/huanglu.thu19/corpus/edu/chinglish_haitian_2kh_16k/wav_ark/k190/*.scp | wc -l
1
>🌟 wc -l  # 统计文件个数
1
>🌟 ls -l *.wav | wc -l  # 统计某个目录下 某种后缀的文件个数
1
>ls -l *.wav | grep "^-" | wc -l
1
>grep "^-"  # 过滤ls的输出信息,只保留一般文件,只保留目录是grep "^d"。

🌟 在自己电脑下,还是得 cd 到指定路径下才行,字节的 HDFS 数据库是只能那么读取列表,所以才可以那么用


1
2
3
4
$ basename /tmp/test/file.txt
file.txt
$ basename /tmp/test/file.txt .txt
file
1
2
3
4
>basename [pathname] [suffix]
>basename [string] [suffix]

>suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。
1
2
3
4
>$ basename $PWD/1027.md 
>1027.md
>$ basename $PWD/1027.md .md
>1027

🌟awk 命令:一种处理文本文件的语言

1
2
# 从说话人信息文件中提取性别
reader_gender=$(egrep "^$reader[ ]+\|" $spk_file | awk -F'|' '{gsub(/[ ]+/, ""); print tolower($2)}')

11.22组会


  1. 身体好多了,这两周都在校内休息
  2. mentor让做 NER,没兴趣不想做,直接请一段时间假

  1. 琢磨使用 Kaldi 来提取PPGs,先尝试了跑 demo Librispeech,遇到各种问题,还没全部跑通
  2. NVAE256 官方给了一份 ckpt,可能是因为比较大,在做 Evaluete 的时候,load model 后就出现显存不足,后面再琢磨一下怎么载入
  3. 开题材料 修改完成了,还剩两张图还没重新画,明天搞定
  4. AiShell3 环境配起来还有点问题,晚上再折腾一下
  • 论文《Generative adversarial interpolative autoencoding》还没看完,争取这两天看完

  • 软著三个月
  • HDFS:存储音频视频 的数据库
  • PPT:少文字,多图

1108组会:

  • 完成软著申请

  • 完成 开题PPT 修改

  • 完成 VC综述 论文整理

  • 尚未完成 开题综述 主体部分(花了较多时间看格式处理

  • 阅读《AiShell-3》论文:值得分享一个亮点(speaker-embedding-cycle-consistence Loss)


Boild-polit 数据集在15043上有?

image-20201108153938426


  • 前端:Tacotron

  • 后端:MelGAN

  • 🌟特点:在多说话人合成任务上,为了进一步增加相似度,提出了“speaker identity feedback constraint

  • 公式上体现:

    • image-20201108153543937
  • 部分,先预训练,然后在训练 Tacotron 的时候参数不再参与训练 Frozen


另一些亮点:

  1. Tacotron2 中,对长序列语音的合成,表现乏力;

    • 通常改进方法是:从 hybrid-attention mechanism 改进为 purely location-based attention mechanisms ,即 Attention 机制的改进

    • 但是这么弄,会使得 长句子的 韵律表现很差

    • 本文转用 data augmentation 数据增强 来处理长句子合成问题

    • 扩充后的数据用于微调收敛于原始数据集TTS模型

  2. 在语音合成任务中,之前较少看见 VAD 操作,一般在识别任务上用的比较多;

    • 本文在数据预处理上,用 基于能量谱的 VAD 来对训练集 语音开始部分的静音帧进行去除
    • 帮助加速后续的 优化对齐环节

🌟备注:

  1. 在公司里 && VCC2020中,很多队伍提到,用 24k 的生成效果比 16k 提升显著,本文是用16k,之后可从这个点做稍微提升