"src/git@developer.sourcefind.cn:renzhc/diffusers_dcu.git" did not exist on "8c530fc2f6a76a2aefb6b285dce6df1675092ac6"
README.md 5.48 KB
Newer Older
dcuai's avatar
dcuai committed
1
# Conformer_WeNet
luopl's avatar
luopl committed
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

## 论文

`WeNet: Production Oriented Streaming and Non-streaming End-to-End Speech Recognition Toolkit`

- [https://arxiv.org/pdf/2102.01547.pdf](https://arxiv.org/pdf/2102.01547.pdf)

## 模型结构

Conformer模型是一种结合了Transformer的自注意力机制和卷积神经网络的模型结构,用于语音识别和自然语言处理任务,具有时域和频域特征的建模能力。

![model](./img/model.png)

## 算法原理

Conformer算法原理是通过结合多层的Transformer编码器和深度卷积神经网络,实现对输入序列的时域和频域特征进行建模,从而提高语音识别和自然语言处理任务的性能。

![conformer encoder](./img/conformer_encoder.png)

## 环境配置

### Docker(方法一)

此处提供[光源](https://www.sourcefind.cn/#/service-details)拉取docker镜像的地址与使用步骤

```
dcuai's avatar
dcuai committed
28
docker pull image.sourcefind.cn:5000/dcu/admin/base/custom:conformer_pytorch2.1.0-ubuntu20.04-dtk24.04.1-py3.8
luopl's avatar
luopl committed
29

dcuai's avatar
dcuai committed
30
docker run -it -v /path/your_code_data/:/path/your_code_data/ -v /opt/hyhal:/opt/hyhal:ro --shm-size=32G --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name docker_name imageID bash
luopl's avatar
luopl committed
31
32
33
34
35
36
37
38
39
40

cd /path/workspace/
```

### Dockerfile(方法二)

此处提供dockerfile的使用方法

```
cd ./docker
dcuai's avatar
dcuai committed
41
42
docker build --no-cache -t conformer:latest .
docker run -it -v /path/your_code_data/:/path/your_code_data/ -v /opt/hyhal:/opt/hyhal:ro  --shm-size=32G --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name docker_name imageID bash
luopl's avatar
luopl committed
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
```


## 数据集

`Aishell`

- [http://openslr.org/33/](http://openslr.org/33/)


`Aishell`在SCNet上的快速下载链接:


- [http://113.200.138.88:18080/aidatasets/project-dependency/aishell/-/raw/master/resource_aishell.tgz](http://113.200.138.88:18080/aidatasets/project-dependency/aishell/-/raw/master/resource_aishell.tgz)

luopl's avatar
luopl committed
58
59
- [http://113.200.138.88:18080/aidatasets/project-dependency/aishell/-/raw/master/data_aishell.tgz](http://113.200.138.88:18080/aidatasets/project-dependency/aishell/-/raw/master/data_aishell.tgz)

luopl's avatar
luopl committed
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
此处提供数据预处理脚本的使用方法

```
#如果自行下载了aishell数据集,只需要在run.sh文件中修改数据集路径,然后执行如下指令即可
cd ./examples/aishell/s0
#设置stage为-1会自动下载数据集,若有下载好的数据集,可手动设置run.sh脚本中的data路径即可省去下载过程
bash run.sh --stage -1 --stop_stage -1

bash run.sh --stage 0 --stop_stage 0

bash run.sh --stage 1 --stop_stage 1

bash run.sh --stage 2 --stop_stage 2

bash run.sh --stage 3 --stop_stage 3

```

预处理好的训练数据目录结构如下,用于正常训练的完整数据集请按此目录结构进行制备:
该工程数据集分为两个部分,一个是原始数据,另一个是索引和音频提取的特征文件

1、原始数据

```
├── data_aishell
│   ├── transcript
│   │   └── aishell_transcript_v0.8.txt
│   └── wav
│       ├── dev
│       ├── test
│       └── train
├── data_aishell.tgz
├── resource_aishell
│   ├── lexicon.txt
│   └── speaker.info
└── resource_aishell.tgz
```

2、索引和音频提取的特征文件

```
├── dev
│   ├── data.list
│   ├── text
│   └── wav.scp
├── dict
│   └── lang_char.txt
├── local
│   ├── dev
│   │   ├── text
│   │   ├── transcripts.txt
│   │   ├── utt.list
│   │   ├── wav.flist
│   │   ├── wav.scp
│   │   └── wav.scp_all
│   ├── test
│   │   ├── text
│   │   ├── transcripts.txt
│   │   ├── utt.list
│   │   ├── wav.flist
│   │   ├── wav.scp
│   │   └── wav.scp_all
│   └── train
│       ├── text
│       ├── transcripts.txt
│       ├── utt.list
│       ├── wav.flist
│       ├── wav.scp
│       └── wav.scp_all
├── test
│   ├── data.list
│   ├── text
│   └── wav.scp
└── train
    ├── data.list
    ├── global_cmvn
    ├── text
    └── wav.scp
```



## 训练

```
dcuai's avatar
dcuai committed
145
146
# 默认是4卡,可以通过修改run_train.sh文件修改卡数,数据集路径
# 需要注意训练默认在evaluation过程输出识别的结果,结果的输出会增加训练的时间,单独测试可以在./wenet/bin/recognize.py 文件中注释掉355行的logging.info('{} {}'.format(key, args.connect_symbol.join(content))),不显示输出的结果,从而减少训练的耗时
luopl's avatar
luopl committed
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
bash train.sh 
```

## 推理

```
# 默认使用exp/conformer/final.pt进行推理,可以手动修改
# 注意如果训练过程中关闭了日志输出,需要手动打开,否则将不会输出识别的内容
bash validate.sh
```

## result

![result](./img/result.png)

### 精度

测试数据:[aishell](http://openslr.org/33/),使用的加速卡:Z100L。

根据测试结果情况填写表格:

| 卡数 | 数据精度 |  精度   |
| :--: | :------: | :-----: |
|  4   |   fp32   | 93.1294 |

## 应用场景

### 算法类别

`语音识别`

### 热点应用行业

`金融,通信,广媒`

## 源码仓库及问题反馈

chenzk's avatar
chenzk committed
184
- [https://developer.sourcefind.cn/codes/modelzoo/conformer_pytorch](https://developer.sourcefind.cn/codes/modelzoo/conformer_pytorch)
luopl's avatar
luopl committed
185
186
187
188

## 参考资料

- https://github.com/wenet-e2e/wenet