# ModelArts-keras-character-recognition
**Repository Path**: sheng_peng_exhibition/densent_ctc
## Basic Information
- **Project Name**: ModelArts-keras-character-recognition
- **Description**: No description available
- **Primary Language**: Python
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2020-07-09
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 参考
- [华为云官方文档]('https://support.huaweicloud.com/engineers-modelarts/modelarts_23_0092.html#modelarts_23_0092__table1683418482455')
- [github官方示例]('https://github.com/huaweicloud/ModelArts-Lab')
- [gitee官方示例]('https://gitee.com/ModelArts/ModelArts-Lab')
- [此次测试代码]('https://gitee.com/sheng_peng_exhibition/densent_ctc')
- 数据集/训练好的模型 (链接:https://pan.baidu.com/s/1ZcQozu1st87WUR8aqTiqUw
提取码:sh2w )
- text-detection-ocr: https://github.com/GlassyWing/text-detection-ocr
# 完整流程
1. 本地:准备数据集、训练代码、模型推理代码、模型配置文件
2. 控制台OBS:选择区域,新建桶
3. 控制台ModelArts:选择区域(需与新建桶的区域一致)
4. 控制台ModelArts:创建训练作业
5. 控制台ModelArts:导入训练模型
6. 控制台ModelArts:部署上线,在线服务测试
# 本地准备
- 数据集
1. 训练集、验证集
2. 标签文件
3. 字典
- 代码 参考官方代码:ModelArts-Lab\train_inference\image_recognition\codes
1. 训练代码 `train.py`
2. 测试代码(仿真部署)`local_infer_test.py`
3. 模型推理代码 参考 https://support.huaweicloud.com/engineers-modelarts/modelarts_23_0093.html
3. 模型配置文件 参考 https://support.huaweicloud.com/engineers-modelarts/modelarts_23_0092.html
## 本地调试
- 环境
`git clone git@gitee.com:sheng_peng_exhibition/densent_ctc.git`
`pip install -r requirement.txt`
- 训练
使用低batch size 测试训练代码逻辑没问题(读取->训练->保存->转换成pb文件)
local_debug = True 见代码启动文件
```
tf.flags.DEFINE_integer('batch_size', 8, 'number of training iterations.')
tf.flags.DEFINE_integer('max_epochs', 2, 'max number of training iterations.')
tf.flags.DEFINE_integer('num_gpus', 1, 'gpu nums.')
tf.flags.DEFINE_integer('num_classes', 37, 'num_classes.')
tf.flags.DEFINE_integer('steps_per_epoch', 100, 'step_per_epoch.')
tf.flags.DEFINE_string('data_url', './data', 'dataset directory.')
tf.flags.DEFINE_string('dict_url', './digitEn_37.txt', 'dictionary directory.')
tf.flags.DEFINE_string('train_file_url', './data/train_labels.txt', 'train labels file.')
tf.flags.DEFINE_string('val_file_url', './data/val_labels.txt', 'val labels file.')
tf.flags.DEFINE_string('train_url', './output', 'saved model directory.')
tf.flags.DEFINE_float('learning_rate', 0.05, 'learning rate.')
tf.flags.DEFINE_bool('local_debug', True, 'local debug.')
```
将数据集拷贝至当前工作目录
>`python train.py`
- 推理
>`python local_infer_test.py --model_path='./output/pb_model' --data_path='./data' --dict_file='./digitEn_37.txt'`
- 移植代码到ModelArts
>**修改数据访问模式**
访问OBS内的数据需要通过moxing库(主要用于数据量过大,只能通过OBS访问数据集的情况)
注:配置文件从OBS复制到训练机器上,则在数据访问时可以正常使用open等函数,减少移植代码的工作量.
见:MoXing开发指南->常用操作的样例代码
https://support.huaweicloud.com/moxing-devg-modelarts/modelarts_11_0005.html
```
mox.file.copy(OBS上的文件路径, 训练机器上的目标路径)
```
>**模型转换为pb格式**
```
def save_keras_model_to_serving(model, export_path):
signature = tf.saved_model.signature_def_utils.predict_signature_def(
inputs={'images': model.inputs[0]}, outputs={'logits': model.outputs[0]})
builder = tf.saved_model.builder.SavedModelBuilder(export_path)
legacy_init_op = tf.group(tf.tables_initializer(), name='legacy_init_op')
builder.add_meta_graph_and_variables(
sess=K.get_session(),
tags=[tf.saved_model.tag_constants.SERVING],
signature_def_map={
'segmentation': signature,
},
legacy_init_op=legacy_init_op)
builder.save()
```
# 控制台OBS
- 建议下载OBS Browser+ :https://support.huaweicloud.com/clientogw-obs/zh-cn_topic_0045829056.html
- 选择地区新建桶(ocr)
- 新建文件夹(digitEn)
- 目录结构如下:
> ocr //桶名称
>> digitEn //新建文件夹
>>> digitEn_37.txt // 字典
>>>
data //数据集
>>>> train_labels.txt // 训练集标签
>>>>
val_labels.txt // 验证集标签
>>>>
*.jpg
>>>
>>> digitEn_output // 输出目录
>>>
digitEn_code // 代码目录
>>>> train.py // 训练启动文件
>>>>
train_lib

# 控制台ModelArts
1. 选择地区(与**桶**的地区一致),新建训练作业


- 红色框信息表示在训练机器上已完成训练并保存为pb格式,再使用moxing库copy到OBS中(见启动文件代码),至此完成训练过程。
2. 导入模型
- 将模型推理代码、模型配置文件copy至OBS中,与pb格式模型文件放置同一处。

- 从训练中选择/从OBS中选择均可(注意选择model文件夹的上一级目录)


3. 配置在线服务

部署过程均可在日志中查看,依据日志来调试模型推理代码和模型配置文件
- 在线服务测试

至此完成所有流程!欢迎交流!