README.md 5.8 KB
Newer Older
1 2 3 4
运行本目录下的程序示例需要使用PaddlePaddle v0.10.0 版本。如果您的PaddlePaddle安装版本低于此要求,请按照[安装文档](http://www.paddlepaddle.org/docs/develop/documentation/zh/build_and_install/pip_install_cn.html)中的说明更新PaddlePaddle安装版本。

---

P
peterzhang2029 已提交
5 6 7 8
# 场景文字识别 (STR, Scene Text Recognition)

## STR任务简介

P
peterzhang2029 已提交
9
许多场景图像中包含着丰富的文本信息,它们可以从很大程度上帮助人们去认知场景图像的内容及含义,因此场景图像中的文本识别对所在图像的信息获取具有极其重要的作用。同时,场景图像文字识别技术的发展也促进了一些新型应用的产生,例如:\[[1](#参考文献)\]通过使用深度学习模型来自动识别路牌中的文字,帮助街景应用获取更加准确的地址信息。
P
peterzhang2029 已提交
10

P
peterzhang2029 已提交
11
本例将演示如何用 PaddlePaddle 完成 **场景文字识别 (STR, Scene Text Recognition)** 。任务如下图所示,给定一张场景图片,`STR` 需要从中识别出对应的文字"keep"。
P
peterzhang2029 已提交
12 13 14

<p align="center">
<img src="./images/503.jpg"/><br/>
P
peterzhang2029 已提交
15
图 1. 输入数据示例 "keep"
P
peterzhang2029 已提交
16 17
</p>

18

P
peterzhang2029 已提交
19 20
## 使用 PaddlePaddle 训练与预测

P
peterzhang2029 已提交
21 22 23 24 25
### 安装依赖包
```bash
pip install -r requirements.txt
```

P
peterzhang2029 已提交
26
### 修改配置参数
P
peterzhang2029 已提交
27

P
peterzhang2029 已提交
28
 `config.py` 脚本中包含了模型配置和训练相关的参数以及对应的详细解释,代码片段如下:
P
peterzhang2029 已提交
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
```python
class TrainerConfig(object):

      # Whether to use GPU in training or not.
      use_gpu = True
      # The number of computing threads.
      trainer_count = 1

      # The training batch size.
      batch_size = 10

      ...


class ModelConfig(object):

      # Number of the filters for convolution group.
      filter_num = 8

      ...
```
P
peterzhang2029 已提交
50 51

修改 `config.py` 脚本可以实现对参数的调整。例如,通过修改 `use_gpu` 参数来指定是否使用 GPU 进行训练。
P
peterzhang2029 已提交
52

P
peterzhang2029 已提交
53
### 模型训练
54
训练脚本 [./train.py](./train.py) 中设置了如下命令行参数:
P
peterzhang2029 已提交
55 56

```
P
peterzhang2029 已提交
57 58 59 60 61
Options:
  --train_file_list_path TEXT  The path of the file which contains path list
                               of train image files.  [required]
  --test_file_list_path TEXT   The path of the file which contains path list
                               of test image files.  [required]
P
peterzhang2029 已提交
62 63 64 65
  --label_dict_path TEXT       The path of label dictionary. If this parameter
                               is set, but the file does not exist, label
                               dictionay will be built from the training data
                               automatically.  [required]
P
peterzhang2029 已提交
66 67 68
  --model_save_dir TEXT        The path to save the trained models (default:
                               'models').
  --help                       Show this message and exit.
P
peterzhang2029 已提交
69

P
peterzhang2029 已提交
70
```
P
peterzhang2029 已提交
71

P
peterzhang2029 已提交
72
- `train_file_list` :训练数据的列表文件,每行由图片的存储路径和对应的标记文本组成,格式为:
P
peterzhang2029 已提交
73 74
```
word_1.png, "PROPER"
75
word_2.png, "FOOD"
P
peterzhang2029 已提交
76
```
P
peterzhang2029 已提交
77 78 79
- `test_file_list` :测试数据的列表文件,格式同上。
- `label_dict_path` :训练数据中标记字典的存储路径,如果指定路径中字典文件不存在,程序会使用训练数据中的标记数据自动生成标记字典。
- `model_save_dir` :模型参数的保存目录,默认为`./models`
P
peterzhang2029 已提交
80 81 82

### 具体执行的过程:

P
peterzhang2029 已提交
83 84
1.从官方网站下载数据\[[2](#参考文献)\](Task 2.3: Word Recognition (2013 edition)),会有三个文件: `Challenge2_Training_Task3_Images_GT.zip``Challenge2_Test_Task3_Images.zip``Challenge2_Test_Task3_GT.txt`
分别对应训练集的图片和图片对应的单词、测试集的图片、测试数据对应的单词。然后执行以下命令,对数据解压并移动至目标文件夹:
P
peterzhang2029 已提交
85

P
peterzhang2029 已提交
86
```bash
P
peterzhang2029 已提交
87 88 89 90 91 92 93
mkdir -p data/train_data
mkdir -p data/test_data
unzip Challenge2_Training_Task3_Images_GT.zip -d data/train_data
unzip Challenge2_Test_Task3_Images.zip -d data/test_data
mv Challenge2_Test_Task3_GT.txt data/test_data
```

P
peterzhang2029 已提交
94
2.获取训练数据文件夹中 `gt.txt` 的路径 (data/train_data)和测试数据文件夹中`Challenge2_Test_Task3_GT.txt`的路径(data/test_data)。
P
peterzhang2029 已提交
95

P
peterzhang2029 已提交
96 97 98 99
3.执行如下命令进行训练:
```bash
python train.py \
--train_file_list_path 'data/train_data/gt.txt' \
P
peterzhang2029 已提交
100 101
--test_file_list_path 'data/test_data/Challenge2_Test_Task3_GT.txt' \
--label_dict_path 'label_dict.txt'
P
peterzhang2029 已提交
102
```
P
peterzhang2029 已提交
103
4.训练过程中,模型参数会自动备份到指定目录,默认会保存在 `./models` 目录下。
P
peterzhang2029 已提交
104 105


P
peterzhang2029 已提交
106
### 预测
P
peterzhang2029 已提交
107
预测部分由 `infer.py` 完成,使用的是最优路径解码算法,即:在每个时间步选择一个概率最大的字符。在使用过程中,需要在 `infer.py` 中指定具体的模型保存路径、图片固定尺寸、batch_size(默认为10)、标记词典路径和图片文件的列表文件。执行如下代码:
P
peterzhang2029 已提交
108 109 110 111
```bash
python infer.py \
--model_path 'models/params_pass_00000.tar.gz' \
--image_shape '173,46' \
P
peterzhang2029 已提交
112
--label_dict_path 'label_dict.txt' \
P
peterzhang2029 已提交
113 114 115
--infer_file_list_path 'data/test_data/Challenge2_Test_Task3_GT.txt'
```
即可进行预测。
P
peterzhang2029 已提交
116 117 118 119 120 121 122 123

### 其他数据集

-   [SynthText in the Wild Dataset](http://www.robots.ox.ac.uk/~vgg/data/scenetext/)(41G)
-   [ICDAR 2003 Robust Reading Competitions](http://www.iapr-tc11.org/mediawiki/index.php?title=ICDAR_2003_Robust_Reading_Competitions)

### 注意事项

P
peterzhang2029 已提交
124 125 126
- 由于模型依赖的 `warp CTC` 只有CUDA的实现,本模型只支持 GPU 运行。
- 本模型参数较多,占用显存比较大,实际执行时可以通过调节 `batch_size` 来控制显存占用。
- 本例使用的数据集较小,如有需要,可以选用其他更大的数据集\[[3](#参考文献)\]来训练模型。
P
peterzhang2029 已提交
127 128 129 130

## 参考文献

1. [Google Now Using ReCAPTCHA To Decode Street View Addresses](https://techcrunch.com/2012/03/29/google-now-using-recaptcha-to-decode-street-view-addresses/)
131 132
2. [Focused Scene Text](http://rrc.cvc.uab.es/?ch=2&com=introduction)
3. [SynthText in the Wild Dataset](http://www.robots.ox.ac.uk/~vgg/data/scenetext/)