ModelArts基于densent+ctc实现不定长文本识别训练与部署

Posted spz01

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ModelArts基于densent+ctc实现不定长文本识别训练与部署相关的知识,希望对你有一定的参考价值。

参考

完整流程

  1. 本地:准备数据集、训练代码、模型推理代码、模型配置文件
  2. 控制台OBS:选择区域,新建桶
  3. 控制台ModelArts:选择区域(需与新建桶的区域一致)
  4. 控制台ModelArts:创建训练作业
  5. 控制台ModelArts:导入训练模型
  6. 控制台ModelArts:部署上线,在线服务测试

本地准备

  • 数据集
  1. 训练集、验证集
  2. 标签文件
  3. 字典
  • 代码 参考官方代码:ModelArts-Lab rain_inferenceimage_recognitioncodes
  1. 训练代码 train.py
  2. 测试代码(仿真部署)local_infer_test.py
  3. 模型推理代码 参考 https://support.huaweicloud.com/engineers-modelarts/modelarts_23_0093.html
  4. 模型配置文件 参考 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

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中(见启动文件代码),至此完成训练过程。
  1. 导入模型
  • 将模型推理代码、模型配置文件copy至OBS中,与pb格式模型文件放置同一处。
    技术图片

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

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

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


































以上是关于ModelArts基于densent+ctc实现不定长文本识别训练与部署的主要内容,如果未能解决你的问题,请参考以下文章

论文复现丨基于ModelArts实现Text2SQL

基于 Mindspore 框架与 ModelArts 平台的 MNIST 手写体识别实验

昇腾ModelArts与Atlas 200 DK云端协同开发——行人检测Demo(完整版)

昇腾ModelArts与Atlas 200 DK云端协同开发——行人检测Demo(完整版)

论文复现丨基于ModelArts进行图像风格化绘画

U2Net基于ModelArts Notbook的仿真实验