ModelArts基于densent+ctc实现不定长文本识别训练与部署
Posted spz01
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ModelArts基于densent+ctc实现不定长文本识别训练与部署相关的知识,希望对你有一定的参考价值。
参考
- 华为云官方文档 :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
完整流程
- 本地:准备数据集、训练代码、模型推理代码、模型配置文件
- 控制台OBS:选择区域,新建桶
- 控制台ModelArts:选择区域(需与新建桶的区域一致)
- 控制台ModelArts:创建训练作业
- 控制台ModelArts:导入训练模型
- 控制台ModelArts:部署上线,在线服务测试
本地准备
- 数据集
- 训练集、验证集
- 标签文件
- 字典
- 代码 参考官方代码:ModelArts-Lab rain_inferenceimage_recognitioncodes
- 训练代码
train.py
- 测试代码(仿真部署)
local_infer_test.py
- 模型推理代码 参考 https://support.huaweicloud.com/engineers-modelarts/modelarts_23_0093.html
- 模型配置文件 参考 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 // 验证集标签
*.jpgdigitEn_output // 输出目录
digitEn_code // 代码目录train.py // 训练启动文件
train_lib
控制台ModelArts
- 选择地区(与桶的地区一致),新建训练作业
- 红色框信息表示在训练机器上已完成训练并保存为pb格式,再使用moxing库copy到OBS中(见启动文件代码),至此完成训练过程。
- 导入模型
-
将模型推理代码、模型配置文件copy至OBS中,与pb格式模型文件放置同一处。
-
从训练中选择/从OBS中选择均可(注意选择model文件夹的上一级目录)
- 配置在线服务
部署过程均可在日志中查看,依据日志来调试模型推理代码和模型配置文件
- 在线服务测试
至此完成所有流程!欢迎交流!
以上是关于ModelArts基于densent+ctc实现不定长文本识别训练与部署的主要内容,如果未能解决你的问题,请参考以下文章
基于 Mindspore 框架与 ModelArts 平台的 MNIST 手写体识别实验
昇腾ModelArts与Atlas 200 DK云端协同开发——行人检测Demo(完整版)