conv-ensemble-str

## 1. 概述 此模型基于[Attention and Language Ensemble for Scene Text Recognition with Convolutional Sequence Modeling](https://dl.acm.org/doi/pdf/10.1145/3240508.3240571)中提出的模型结构实现,该算法会载入在[MJSynth](https://www.robots.ox.ac.uk/~vgg/data/text/)上的预训练模型,在用户数据集上做迁移学习。我们提供了训练代码和可用于训练的模型,用于实际场景的微调训练。训练后生成的模型可直接在ModelArts平台部署成在线服务。 场景文本识别的常用评估手段为词级别的正确率。即以词为基本单位,统计正确预测词数量与所有词数量的比例。 本算法的其他信息如下表所示: | 项目 | 说明 | | -------------- | ------------------------------------------------------------ | | 参考论文 | Attention and Language Ensemble for Scene Text Recognition with Convolutional Sequence Modeling | | 使用框架 | Tensorflow-1.13.1 | | 训练集 | MJSynth (训练集部分) | | 训练总step数 | 30万 + 30万 = 60万 | | 训练batch_size | 单卡128 | | 训练硬件及耗时 | V100, 17.5小时 + 17.5小时 = 35小时 | | 测试集 | Street View Text (SVT) | | 推理硬件及速度 | GPU, 47ms/pic | | 输入图像尺寸 | 32\*100\*3 | | 原论文准确率 | word accuracy = 83.9 | | 本算法准确率 | word accuracy = 84.2 | 注:本算法复现中,前30W step(17.5小时)使用0.01学习率,后30W step(17.5小时)使用0.001学习率。 ## 2. 训练 ### 2.1 算法基本信息 - 任务类型: 场景文本识别 - 支持的框架引擎:Tensorflow-1.13.1-Python2.7 - 算法输入: - 存储在OBS上的数据集,必须按照TF-Record格式及MJSynth目录结构进行存储。详情请查看下文第4节案例指导。 - MJSynth预训练模型,在SVT上的识别精度为84.2 - 算法输出: - 用于Tensorflow推理的模型,GPU推理速度:47ms/pic(TitanX) - 代码结构: ``` src ├── LICENSE # 开源协议 ├── README.md # 开源代码的原版介绍 ├── pylintrc ├── config.py # 配置文件 ├── convert.py # 用于将ckpt模型转换成pb模型 ├── datasets.py # 数据集定义文件 ├── demo.py # 从ckpt中读取模型,直接从图片读入,输出识别结果的demo ├── demo_pb.py # 从pb中读取模型,直接从图片读入,输出识别结果的demo ├── eval_one_pass.sh # 推理阶段直接在整个数据集上测试精度的脚本 ├── train.py # 模型训练代码 ├── evaluation.py # 模型评估代码 ├── model # 以下目录分编码器,解码器实现网络结构 │ ├── __init__.py │ ├── decoder_conv.py │ ├── encoder_resnet.py │ ├── model.py │ └── resnet_v2.py ├── tools │ └── make_tfrecord_datasets.py # 生成tfrecord格式数据集的工具。 ├── utils # 模型实现中用的工具代码 │ ├── __init__.py │ ├── beam_search.py │ ├── hooks.py │ ├── inception_preprocessing.py │ ├── metrics.py │ └── utils.py ├── trained_model │ ├── model # 用于存放复现的模型,可以用于进一步预训练 │ │ ├── config.json │ │ ├── customize_service.py │ │ ├── Iteration_30w_accuracy_84.pb │ │ ├── variables │ │ │ ├── checkpoint │ │ │ ├── variables.ckpt.index │ │ │ ├── variables.ckpt.meta │ │ │ └── variables.ckpt.data-00000-of-00001 ├── pre-trained_weights # 用于复现阶段的初始化模型,未使用因而未空 ``` ### 2.2 主要训练参数说明 | 名称 | 默认值 | 类型 | 是否必填 | 是否可修改 | 描述 | | ------------- | -------------- | ------ | -------- | ---------- | ------------------------------------------------------------ | | train_url | None | string | 是 | 是 | 设置训练输出位置后会自动生成该参数值,为OBS上训练的输出位置 | | data_url | None | string | 是 | 是 | 设置数据存储位置后会自动生成该参数值,为OBS上数据来源位置 | | output_dir | ./train_output | string | 是 | 是 | 设置模型、日志等的输出路径 | | train_steps | 300000 | int | 否 | 是 | 训练的step总数。 | | dataset_dir | None | string | 否 | 是 | 训练数据集路径。 | | checkpoint | None | string | 否 | 是 | 预训练模型路径(当基于某模型进一步训练时需要) | | learning_rate | 0.01 | float | 否 | 是 | 初始学习率设置。本算法中需要在第二个训练周期手动将学习率设置为0.001继续训练 | | eval | False | bool | 是 | 是 | 程序运行的阶段。若为训练阶段则必须为False,评估为True。 | 注: 设置预训练模型时,需设置checkpoint为预训练模型的目录。 ### 2.3 其他可配置的训练参数(config.py中定义) | 名称 | 默认值 | 类型 | 是否必填 | 是否可修改 | 描述 | | ----------------------------- | -------- | ------- | -------- | ---------- | ------------------------------------------------------------ | | debug | Fasle | boolean | 否 | 是 | 使用tfdbg进行调试 | | beam_width | 5 | int | 否 | 是 | 推理阶段的beam search大小。若值为0则表示关闭beam search | | optimizer | Momentum | string | 否 | 是 | 模型的优化方法,支持Tensorflow常用的优化方式 | | clip_gradients | 20.0 | float | 否 | 是 | 梯度的clip值,用于训练初期的稳定训练。 | | momentum | 0.9 | float | 否 | 是 | 优化方法中的momentum值。 | | use_nesterov | True | boolean | 否 | 是 | 优化方法中是否使用nesterov。 | | batch_size | 128 | int | 否 | 是 | 训练的batch size值。 | | train_steps | 300000 | int | 否 | 是 | 训练的step总数。 | | tf_random_seed | None | int | 否 | 是 | Tensorflow初始化随机种子。 | | save_checkpoints_secs | 900 | int | 否 | 是 | 保存训练模型的间隔时间,单位为秒。也可以用save_checkpoints_steps代替。 | | save_checkpoints_steps | None | int | 否 | 是 | 保存训练模型的间隔步数。也可以用save_checkpoints_secs代替。 | | keep_checkpoint_max | 5 | int | 否 | 是 | 保存的checkpoint模型最大数量。如果为None或者0,所有的checkpoint模型都将被保存。 | | keep_checkpoint_every_n_hours | 4 | int | 否 | 是 | 除了保存最近的keep_checkpoint_max个模型外,额外保存模型。该参数设置训练间隔时间保存的模型数量,单位为小时。 | | gpu_memory_fraction | 1.0 | float | 否 | 是 | 设置训练进程能够占用该显卡的显存比列。 | | gpu_allow_growth | False | boolean | 否 | 是 | 是否允许Tensorflow动态地增长内存。 | | log_step | 100 | int | 否 | 是 | 每log_step步保存一次日志信息。 | | summary | True | boolean | 否 | 是 | 是否使用Tensorboard保存训练信息。 | | max_outputs | 4 | int | 否 | 是 | Tensorboard中在一个batch里保存图像及文本的数量。 | ### 2.4 训练输出文件 训练完成后的输出文件如下: ``` train_output ├── events.out.tfevents.*.* # Tensorboard日志文件 ├── checkpoint # tensorflow记录当前checkpoint的文件 ├── graph.pbtxt # tensorflow计算图信息 ├── statistics.log # 记录tensorflow operation及网络参数大小文件 ├── saved_model.pb # 训练最后步骤模型导出的推理图文件,用于部署在线模型 ├── model.ckpt-300000.index # 训练步数为300000的输出模型 ├── model.ckpt-300000.meta # 训练步数为300000的输出模型 ├── model.ckpt-300000.data-00000-of-00001 # 训练步数为300000的输出模型 ├── ... # 其他步数的输出模型 ``` 注:输出结果保存多个时间步的模型,可挑选效果更好的模型作为最终输出模型。 ## 3. GPU推理 元模型从训练结果中的输出模型中选择,选择训练作业及版本。 代码中,提供两种数据格式的评估: 1) 若格式为.jpg以及.png的图像,使用train.py --eval=True的方式进行评估 2) 若格式为tfrecord,使用evaluation.py使用了评估功能;eval_one_pass提供调用evaluation.py的功能及样例。 ## 4. 案例指导 本算法的详细使用方法,请查看[《ModelArts AI Gallery算法conv-ensemble-str使用指导》](https://marketplace.huaweicloud.com/markets/aihub/article/detail/?content_id=85514706-d8d9-4448-b1f5-74e9af3ebffe)。
1. 概述
此模型基于Attention and Language Ensemble for Scene Text Recognition with Convolutional Sequence Modeling中提出的模型结构实现,该算法会载入在MJSynth上的预训练模型,在用户数据集上做迁移学习。我们提供了训练代码和可用于训练的模型,用于实际场景的微调训练。训练后生成的模型可直接在ModelArts平台部署成在线服务。
场景文本识别的常用评估手段为词级别的正确率。即以词为基本单位,统计正确预测词数量与所有词数量的比例。
本算法的其他信息如下表所示:
项目 | 说明 |
---|---|
参考论文 | Attention and Language Ensemble for Scene Text Recognition with Convolutional Sequence Modeling |
使用框架 | Tensorflow-1.13.1 |
训练集 | MJSynth (训练集部分) |
训练总step数 | 30万 + 30万 = 60万 |
训练batch_size | 单卡128 |
训练硬件及耗时 | V100, 17.5小时 + 17.5小时 = 35小时 |
测试集 | Street View Text (SVT) |
推理硬件及速度 | GPU, 47ms/pic |
输入图像尺寸 | 32*100*3 |
原论文准确率 | word accuracy = 83.9 |
本算法准确率 | word accuracy = 84.2 |
注:本算法复现中,前30W step(17.5小时)使用0.01学习率,后30W step(17.5小时)使用0.001学习率。
2. 训练
2.1 算法基本信息
- 任务类型: 场景文本识别
- 支持的框架引擎:Tensorflow-1.13.1-Python2.7
- 算法输入:
- 存储在OBS上的数据集,必须按照TF-Record格式及MJSynth目录结构进行存储。详情请查看下文第4节案例指导。
- MJSynth预训练模型,在SVT上的识别精度为84.2
- 算法输出:
- 用于Tensorflow推理的模型,GPU推理速度:47ms/pic(TitanX)
- 代码结构:
src
├── LICENSE # 开源协议
├── README.md # 开源代码的原版介绍
├── pylintrc
├── config.py # 配置文件
├── convert.py # 用于将ckpt模型转换成pb模型
├── datasets.py # 数据集定义文件
├── demo.py # 从ckpt中读取模型,直接从图片读入,输出识别结果的demo
├── demo_pb.py # 从pb中读取模型,直接从图片读入,输出识别结果的demo
├── eval_one_pass.sh # 推理阶段直接在整个数据集上测试精度的脚本
├── train.py # 模型训练代码
├── evaluation.py # 模型评估代码
├── model # 以下目录分编码器,解码器实现网络结构
│ ├── __init__.py
│ ├── decoder_conv.py
│ ├── encoder_resnet.py
│ ├── model.py
│ └── resnet_v2.py
├── tools
│ └── make_tfrecord_datasets.py # 生成tfrecord格式数据集的工具。
├── utils # 模型实现中用的工具代码
│ ├── __init__.py
│ ├── beam_search.py
│ ├── hooks.py
│ ├── inception_preprocessing.py
│ ├── metrics.py
│ └── utils.py
├── trained_model
│ ├── model # 用于存放复现的模型,可以用于进一步预训练
│ │ ├── config.json
│ │ ├── customize_service.py
│ │ ├── Iteration_30w_accuracy_84.pb
│ │ ├── variables
│ │ │ ├── checkpoint
│ │ │ ├── variables.ckpt.index
│ │ │ ├── variables.ckpt.meta
│ │ │ └── variables.ckpt.data-00000-of-00001
├── pre-trained_weights # 用于复现阶段的初始化模型,未使用因而未空
2.2 主要训练参数说明
名称 | 默认值 | 类型 | 是否必填 | 是否可修改 | 描述 |
---|---|---|---|---|---|
train_url | None | string | 是 | 是 | 设置训练输出位置后会自动生成该参数值,为OBS上训练的输出位置 |
data_url | None | string | 是 | 是 | 设置数据存储位置后会自动生成该参数值,为OBS上数据来源位置 |
output_dir | ./train_output | string | 是 | 是 | 设置模型、日志等的输出路径 |
train_steps | 300000 | int | 否 | 是 | 训练的step总数。 |
dataset_dir | None | string | 否 | 是 | 训练数据集路径。 |
checkpoint | None | string | 否 | 是 | 预训练模型路径(当基于某模型进一步训练时需要) |
learning_rate | 0.01 | float | 否 | 是 | 初始学习率设置。本算法中需要在第二个训练周期手动将学习率设置为0.001继续训练 |
eval | False | bool | 是 | 是 | 程序运行的阶段。若为训练阶段则必须为False,评估为True。 |
注:
设置预训练模型时,需设置checkpoint为预训练模型的目录。
2.3 其他可配置的训练参数(config.py中定义)
名称 | 默认值 | 类型 | 是否必填 | 是否可修改 | 描述 |
---|---|---|---|---|---|
debug | Fasle | boolean | 否 | 是 | 使用tfdbg进行调试 |
beam_width | 5 | int | 否 | 是 | 推理阶段的beam search大小。若值为0则表示关闭beam search |
optimizer | Momentum | string | 否 | 是 | 模型的优化方法,支持Tensorflow常用的优化方式 |
clip_gradients | 20.0 | float | 否 | 是 | 梯度的clip值,用于训练初期的稳定训练。 |
momentum | 0.9 | float | 否 | 是 | 优化方法中的momentum值。 |
use_nesterov | True | boolean | 否 | 是 | 优化方法中是否使用nesterov。 |
batch_size | 128 | int | 否 | 是 | 训练的batch size值。 |
train_steps | 300000 | int | 否 | 是 | 训练的step总数。 |
tf_random_seed | None | int | 否 | 是 | Tensorflow初始化随机种子。 |
save_checkpoints_secs | 900 | int | 否 | 是 | 保存训练模型的间隔时间,单位为秒。也可以用save_checkpoints_steps代替。 |
save_checkpoints_steps | None | int | 否 | 是 | 保存训练模型的间隔步数。也可以用save_checkpoints_secs代替。 |
keep_checkpoint_max | 5 | int | 否 | 是 | 保存的checkpoint模型最大数量。如果为None或者0,所有的checkpoint模型都将被保存。 |
keep_checkpoint_every_n_hours | 4 | int | 否 | 是 | 除了保存最近的keep_checkpoint_max个模型外,额外保存模型。该参数设置训练间隔时间保存的模型数量,单位为小时。 |
gpu_memory_fraction | 1.0 | float | 否 | 是 | 设置训练进程能够占用该显卡的显存比列。 |
gpu_allow_growth | False | boolean | 否 | 是 | 是否允许Tensorflow动态地增长内存。 |
log_step | 100 | int | 否 | 是 | 每log_step步保存一次日志信息。 |
summary | True | boolean | 否 | 是 | 是否使用Tensorboard保存训练信息。 |
max_outputs | 4 | int | 否 | 是 | Tensorboard中在一个batch里保存图像及文本的数量。 |
2.4 训练输出文件
训练完成后的输出文件如下:
train_output
├── events.out.tfevents.*.* # Tensorboard日志文件
├── checkpoint # tensorflow记录当前checkpoint的文件
├── graph.pbtxt # tensorflow计算图信息
├── statistics.log # 记录tensorflow operation及网络参数大小文件
├── saved_model.pb # 训练最后步骤模型导出的推理图文件,用于部署在线模型
├── model.ckpt-300000.index # 训练步数为300000的输出模型
├── model.ckpt-300000.meta # 训练步数为300000的输出模型
├── model.ckpt-300000.data-00000-of-00001 # 训练步数为300000的输出模型
├── ... # 其他步数的输出模型
注:输出结果保存多个时间步的模型,可挑选效果更好的模型作为最终输出模型。
3. GPU推理
元模型从训练结果中的输出模型中选择,选择训练作业及版本。
代码中,提供两种数据格式的评估:
1) 若格式为.jpg以及.png的图像,使用train.py --eval=True的方式进行评估
2) 若格式为tfrecord,使用evaluation.py使用了评估功能;eval_one_pass提供调用evaluation.py的功能及样例。
4. 案例指导
本算法的详细使用方法,请查看《ModelArts AI Gallery算法conv-ensemble-str使用指导》。
1. 概述
此模型基于Attention and Language Ensemble for Scene Text Recognition with Convolutional Sequence Modeling中提出的模型结构实现,该算法会载入在MJSynth上的预训练模型,在用户数据集上做迁移学习。我们提供了训练代码和可用于训练的模型,用于实际场景的微调训练。训练后生成的模型可直接在ModelArts平台部署成在线服务。
场景文本识别的常用评估手段为词级别的正确率。即以词为基本单位,统计正确预测词数量与所有词数量的比例。
本算法的其他信息如下表所示:
项目 | 说明 |
---|---|
参考论文 | Attention and Language Ensemble for Scene Text Recognition with Convolutional Sequence Modeling |
使用框架 | Tensorflow-1.13.1 |
训练集 | MJSynth (训练集部分) |
训练总step数 | 30万 + 30万 = 60万 |
训练batch_size | 单卡128 |
训练硬件及耗时 | V100, 17.5小时 + 17.5小时 = 35小时 |
测试集 | Street View Text (SVT) |
推理硬件及速度 | GPU, 47ms/pic |
输入图像尺寸 | 32*100*3 |
原论文准确率 | word accuracy = 83.9 |
本算法准确率 | word accuracy = 84.2 |
注:本算法复现中,前30W step(17.5小时)使用0.01学习率,后30W step(17.5小时)使用0.001学习率。
2. 训练
2.1 算法基本信息
- 任务类型: 场景文本识别
- 支持的框架引擎:Tensorflow-1.13.1-Python2.7
- 算法输入:
- 存储在OBS上的数据集,必须按照TF-Record格式及MJSynth目录结构进行存储。详情请查看下文第4节案例指导。
- MJSynth预训练模型,在SVT上的识别精度为84.2
- 算法输出:
- 用于Tensorflow推理的模型,GPU推理速度:47ms/pic(TitanX)
- 代码结构:
src
├── LICENSE # 开源协议
├── README.md # 开源代码的原版介绍
├── pylintrc
├── config.py # 配置文件
├── convert.py # 用于将ckpt模型转换成pb模型
├── datasets.py # 数据集定义文件
├── demo.py # 从ckpt中读取模型,直接从图片读入,输出识别结果的demo
├── demo_pb.py # 从pb中读取模型,直接从图片读入,输出识别结果的demo
├── eval_one_pass.sh # 推理阶段直接在整个数据集上测试精度的脚本
├── train.py # 模型训练代码
├── evaluation.py # 模型评估代码
├── model # 以下目录分编码器,解码器实现网络结构
│ ├── __init__.py
│ ├── decoder_conv.py
│ ├── encoder_resnet.py
│ ├── model.py
│ └── resnet_v2.py
├── tools
│ └── make_tfrecord_datasets.py # 生成tfrecord格式数据集的工具。
├── utils # 模型实现中用的工具代码
│ ├── __init__.py
│ ├── beam_search.py
│ ├── hooks.py
│ ├── inception_preprocessing.py
│ ├── metrics.py
│ └── utils.py
├── trained_model
│ ├── model # 用于存放复现的模型,可以用于进一步预训练
│ │ ├── config.json
│ │ ├── customize_service.py
│ │ ├── Iteration_30w_accuracy_84.pb
│ │ ├── variables
│ │ │ ├── checkpoint
│ │ │ ├── variables.ckpt.index
│ │ │ ├── variables.ckpt.meta
│ │ │ └── variables.ckpt.data-00000-of-00001
├── pre-trained_weights # 用于复现阶段的初始化模型,未使用因而未空
2.2 主要训练参数说明
名称 | 默认值 | 类型 | 是否必填 | 是否可修改 | 描述 |
---|---|---|---|---|---|
train_url | None | string | 是 | 是 | 设置训练输出位置后会自动生成该参数值,为OBS上训练的输出位置 |
data_url | None | string | 是 | 是 | 设置数据存储位置后会自动生成该参数值,为OBS上数据来源位置 |
output_dir | ./train_output | string | 是 | 是 | 设置模型、日志等的输出路径 |
train_steps | 300000 | int | 否 | 是 | 训练的step总数。 |
dataset_dir | None | string | 否 | 是 | 训练数据集路径。 |
checkpoint | None | string | 否 | 是 | 预训练模型路径(当基于某模型进一步训练时需要) |
learning_rate | 0.01 | float | 否 | 是 | 初始学习率设置。本算法中需要在第二个训练周期手动将学习率设置为0.001继续训练 |
eval | False | bool | 是 | 是 | 程序运行的阶段。若为训练阶段则必须为False,评估为True。 |
注:
设置预训练模型时,需设置checkpoint为预训练模型的目录。
2.3 其他可配置的训练参数(config.py中定义)
名称 | 默认值 | 类型 | 是否必填 | 是否可修改 | 描述 |
---|---|---|---|---|---|
debug | Fasle | boolean | 否 | 是 | 使用tfdbg进行调试 |
beam_width | 5 | int | 否 | 是 | 推理阶段的beam search大小。若值为0则表示关闭beam search |
optimizer | Momentum | string | 否 | 是 | 模型的优化方法,支持Tensorflow常用的优化方式 |
clip_gradients | 20.0 | float | 否 | 是 | 梯度的clip值,用于训练初期的稳定训练。 |
momentum | 0.9 | float | 否 | 是 | 优化方法中的momentum值。 |
use_nesterov | True | boolean | 否 | 是 | 优化方法中是否使用nesterov。 |
batch_size | 128 | int | 否 | 是 | 训练的batch size值。 |
train_steps | 300000 | int | 否 | 是 | 训练的step总数。 |
tf_random_seed | None | int | 否 | 是 | Tensorflow初始化随机种子。 |
save_checkpoints_secs | 900 | int | 否 | 是 | 保存训练模型的间隔时间,单位为秒。也可以用save_checkpoints_steps代替。 |
save_checkpoints_steps | None | int | 否 | 是 | 保存训练模型的间隔步数。也可以用save_checkpoints_secs代替。 |
keep_checkpoint_max | 5 | int | 否 | 是 | 保存的checkpoint模型最大数量。如果为None或者0,所有的checkpoint模型都将被保存。 |
keep_checkpoint_every_n_hours | 4 | int | 否 | 是 | 除了保存最近的keep_checkpoint_max个模型外,额外保存模型。该参数设置训练间隔时间保存的模型数量,单位为小时。 |
gpu_memory_fraction | 1.0 | float | 否 | 是 | 设置训练进程能够占用该显卡的显存比列。 |
gpu_allow_growth | False | boolean | 否 | 是 | 是否允许Tensorflow动态地增长内存。 |
log_step | 100 | int | 否 | 是 | 每log_step步保存一次日志信息。 |
summary | True | boolean | 否 | 是 | 是否使用Tensorboard保存训练信息。 |
max_outputs | 4 | int | 否 | 是 | Tensorboard中在一个batch里保存图像及文本的数量。 |
2.4 训练输出文件
训练完成后的输出文件如下:
train_output
├── events.out.tfevents.*.* # Tensorboard日志文件
├── checkpoint # tensorflow记录当前checkpoint的文件
├── graph.pbtxt # tensorflow计算图信息
├── statistics.log # 记录tensorflow operation及网络参数大小文件
├── saved_model.pb # 训练最后步骤模型导出的推理图文件,用于部署在线模型
├── model.ckpt-300000.index # 训练步数为300000的输出模型
├── model.ckpt-300000.meta # 训练步数为300000的输出模型
├── model.ckpt-300000.data-00000-of-00001 # 训练步数为300000的输出模型
├── ... # 其他步数的输出模型
注:输出结果保存多个时间步的模型,可挑选效果更好的模型作为最终输出模型。
3. GPU推理
元模型从训练结果中的输出模型中选择,选择训练作业及版本。
代码中,提供两种数据格式的评估:
1) 若格式为.jpg以及.png的图像,使用train.py --eval=True的方式进行评估
2) 若格式为tfrecord,使用evaluation.py使用了评估功能;eval_one_pass提供调用evaluation.py的功能及样例。
4. 案例指导
本算法的详细使用方法,请查看《ModelArts AI Gallery算法conv-ensemble-str使用指导》。