文档首页> AI开发平台ModelArts> 开发环境> 算法开发套件> 使用算法套件快速完成水表读数识别
更新时间:2024-03-01 GMT+08:00
分享

使用算法套件快速完成水表读数识别

本示例围绕真实AI需求场景,介绍算法开发套件在水表表盘读数识别算法开发任务上的使用流程。

算法开发套件中目前提供自研(ivg系列)和开源(mm系列)共两套算法资产,可应用于分类、检测、分割和OCR等任务中。本示例中将组合使用自研分割算法(ivgSegmentation)和开源OCR算法(mmOCR)完成水表读数识别项目,并使用算法开发套件将其部署为华为云在线服务。

本案例教程仅适用于“华北-北京四”区域,新版Notebook。

准备数据

  1. 登录OBS控制台,创建OBS对象桶,区域选择“华北-北京四”
  2. 登录ModelArts控制台,选择控制台区域为“华北-北京四”
  3. 在“全局配置”页面查看是否已经配置授权,允许ModelArts访问OBS。如果没有配置授权,请参考配置访问授权(全局配置)添加授权。
  4. 分别下载本案例的数据集,水表表盘分割数据集水表表盘读数OCR识别数据集到OBS桶中,单击数据集右侧的“下载”,弹出“选择云服务区域”,选择区域后单击“确定”进入下载详情页面。下载方式选择“对象存储服务(OBS)”,填写OBS路径信息等,详细步骤请参考下载数据集

    OBS路径示例如下:

    obs://{OBS桶名称}/water_meter_segmentation 水表表盘分割数据集

    obs://{OBS桶名称}/water_meter_crop 水表表盘读数OCR识别数据集

    从AI Gallery下载数据集免费,但是数据集存储在OBS桶中会收取少量费用,具体计费请参见OBS价格详情页,案例使用完成后请及时清除资源和数据。

准备开发环境

  1. 在ModelArts控制台的 开发环境 > Notebook页面中,创建基于pytorch1.8-cuda10.2-cudnn7-ubuntu18.04镜像,类型为GPU,规格选择P100V100系列的Notebook,具体操作请参见创建Notebook实例章节。
    如果需要使用本地IDE(PyCharm或VS Code)远程连接Notebook,需要开启SSH远程开发。本案例以在线的JupyterLab为例介绍整个过程。
    图1 创建Notebook实例
  2. Notebook创建完成后,状态为“运行中”。单击“操作”栏的“打开”,进入JupyterLab页面。
    图2 使用JupyterLab打开
  3. 打开JupyterLab的Terminal。此处以Terminal为例介绍整个过程。JupyterLab更多操作请参见JupyterLab简介及常用操作
    图3 打开Terminal

Step1 创建算法工程

  1. 在JupyterLab的Terminal中,在work目录下执行ma-cli createproject命令创建工程,根据提示输入工程名称,例如:water_meter。然后按回车键选择默认参数(连续按五次回车),并选择跳过资产安装步骤(选择6)。
    图4 创建工程
  2. 执行以下命令进入工程目录。
    cd water_meter
  3. 执行以下命令复制项目数据到Notebook中。
    python manage.py copy --source {obs_dataset_path} --dest ./data/raw/water_meter_crop
    python manage.py copy --source {obs_dataset_path} --dest ./data/raw/water_meter_segmentation

    {obs_dataset_path}路径为Step1 准备数据中下载到OBS中的数据集路径,比如“obs://{OBS桶名称}/water_meter_segmentation”“obs://{OBS桶名称}/water_meter_crop”

    图5 复制数据集到Notebook中

Step2 使用deeplabv3完成水表区域分割任务

  1. 执行如下命令安装ivgSegmentation套件。
    python manage.py install algorithm ivgSegmentation==1.0.2
    图6 ivgSegmentation套件安装成功

    如果提示ivgSegmentation版本不正确,可以通过命令python manage.py list algorithm查询版本。

  2. 安装ivgSegmentation套件后,在JupyterLab界面左侧的工程目录中进入“./algorithms/ivgSegmentation/config/sample”文件夹中查看目前支持的分割模型,以sample为例(sample默认的算法就是deeplabv3),文件夹中包括config.py(算法外壳配置)和deeplabv3_resnet50_standard-sample_512x1024.py(模型结构)。
    图7 进入sample文件夹

  3. 表盘分割只需要区分背景和读数区域,因此属于二分类,需要根据项目所需数据集对配置文件进行修改,如下所示:

    修改“config.py”文件。

    图8 修改sample文件夹下的config.py文件

    # config.py

        ... 
    alg_cfg = dict(
        ...    
        data_root='data/raw/water_meter_segmentation',   # 修改为真实路径本地分割数据集路径
        ...
    )
    

    修改完后按Ctrl+S保存。

  4. 修改“deeplabv3_resnet50_standard-sample_512x1024.py”文件。
    图9 修改deeplabv3_resnet50_standard-sample_512x1024.py文件

    # deeplabv3_resnet50_standard-sample_512x1024.py

    gpus=[0]
    ...
    data_cfg = dict(
        ...    num_classes=2,  # 修改为2类
        ...    
        ...    train_scale=(512, 512),  # (h, w)#size全部修改为(512, 512)
        ...    train_crop_size=(512, 512),  # (h, w)
        ...    test_scale=(512, 512),  # (h, w)
        ...    infer_scale=(512, 512),  # (h, w)
     )
    
    

    修改完按Ctrl+S保存。

  5. 在water_meter工程目录下,执行如下命令安装deeplabv3预训练模型。
    python manage.py install model ivgSegmentation:deeplab/deeplabv3_resnet50_cityscapes_512x1024
    图10 安装deeplabv3预训练模型
  6. 执行如下命令训练分割模型。(推荐使用GPU进行训练)
    python manage.py run --cfg algorithms/ivgSegmentation/config/sample/config.py --gpus 0
    图11 分割模型训练结果

    训练好的模型会保存在指定位置中,默认为“./output/deeplabv3_resnet50_standard-sample_512x1024/checkpoints/”中。

  7. 验证模型效果。

    模型训练完成后,可以在验证集上计算模型的指标,首先修改配置文件的模型位置。

    修改“config.py”文件修改完按Ctrl+S保存。

    # config.py

        ...
    alg_cfg = dict(
        ...
        load_from='./output/deeplabv3_resnet50_standard-sample_512x1024/checkpoints/checkpoint_best.pth.tar',  # 修改训练模型的路径
        ...
    )

    执行如下命令计算模型指标。

    python manage.py run --cfg algorithms/ivgSegmentation/config/sample/config.py --pipeline evaluate
    图12 模型指标计算结果
  8. 模型推理。

    模型推理能够指定某一张图片,并且推理出图片的分割区域,并进行可视化,首先需要指定需要推理的图片路径。

    修改“config.py”文件,修改完按Ctrl+S保存。

    alg_cfg = dict(
        ...
       img_file='./data/raw/water_meter_segmentation/image/train_10.jpg'  # 指定需要推理的图片路径
       ...
    )

    执行如下命令推理模型。

    python manage.py run --cfg algorithms/ivgSegmentation/config/sample/config.py --pipeline infer
    图13 表盘分割模型推理结果

    推理输出的图片路径在“./output/deeplabv3_resnet50_standard-sample_512x1024”下。

    图14 水表表盘分割结果可视化
  9. 执行如下命令导出算法SDK。
    python manage.py export --cfg algorithms/ivgSegmentation/config/sample/config.py --is_deploy

    算法开发套件支持将模型导出成一个模型SDK,方便进行模型部署等下游任务。SDK导出的路径为“./export/deeplabv3_resnet50_standard-sample_512x1024/Linux_x86_64_GPU_PyTorch_Common_py”

    图15 SDK导出路径
    图16 SDK导出示意图

Step3 水表读数识别

  1. 执行如下命令安装mmocr套件。
    python manage.py install algorithm mmocr==0.2.1
  2. 安装mmocr套件后,“./algorithms/mmocr/config/textrecog”文件夹中包括config.py(算法外壳配置)和robustscanner_r31_academic.py(模型结构),需要根据所需算法和数据集路径修改配置文件。以下以robust_scanner算法为例。
    图17 进入textrecog文件夹

    修改“robustscanner_r31_academic.py”,如下所示:

    ...
    train_prefix = 'data/raw/water_meter_crop/'  # 修改数据集路径改为水表ocr识别数据集路径
    train_img_prefix1 = train_prefix + 'train'
    train_ann_file1 = train_prefix + 'train.txt'
    
    ...
    test_prefix = 'data/raw/water_meter_crop/'
    test_img_prefix1 = test_prefix + 'val/'
    test_ann_file1 = test_prefix + 'val.txt'

  3. 执行如下命令安装robust_scanner预训练模型。
    python manage.py install model mmocr:textrecog/robust_scanner/robustscanner_r31_academic
    图18 安装robust_scanner模型
  4. 训练OCR模型。

    初次使用mmcv时需要编译mmcv-full,该过程较慢,可以直接使用官方预编译的依赖包。

    预编译包URL: https://download.openmmlab.com/mmcv/dist/cu102/torch1.6.0/index.html

    pip uninstall mmcv -y
    pip install https://download.openmmlab.com/mmcv/dist/cu102/torch1.6.0/mmcv_full-1.3.9-cp37-cp37m-manylinux1_x86_64.whl
    pip install rapidfuzz==2.15.1
    pip install numpy -U

    修改“./algorithms/mmocr/config/textrecog/config.py”,将EPOCHS(迭代数量)改为2。

    图19 修改textrecog文件夹下的config.py文件
    图20 迭代数量修改为2
    执行如下命令训练OCR模型。(仅使用GPU进行训练,大概需要分钟)
    python manage.py run --cfg algorithms/mmocr/config/textrecog/config.py
    图21 OCR模型训练结果

    训练好的模型会保存在指定位置中,默认为output/robustscanner_r31_academic/文件夹中。

  5. 验证模型效果。

    模型训练完成后,可以在验证集上计算模型的指标,首先修改配置文件的模型位置。

    修改“./algorithms/mmocr/config/textrecog/config.py”

    #config.py

    ...
    model_path = './output/robustscanner_r31_academic/latest.pth'
    ...

    执行如下命令验证模型。

    python manage.py run --cfg algorithms/mmocr/config/textrecog/config.py --pipeline evaluate
    图22 计算模型的指标
  6. 可选:模型推理。

    模型推理能够指定某一张图片,并且推理出图片的分割区域,并进行可视化。首先需要指定待推理的图片路径,修改“./algorithms/mmocr/config/textrecog/config.py”,具体如下。

    ...
    infer_img_file='./data/raw/water_meter_crop/val/train_10.jpg'  # 指定需要推理的图片路径 
    ...

    执行如下命令推理。

    python manage.py run --cfg algorithms/mmocr/config/textrecog/config.py --pipeline infer
    图23 模型推理结果

    推理输出的图片路径在“output/robustscanner_r31_academic/vis”文件夹下。

    图24 表盘读数识别结果图
  7. 执行如下命令导出算法SDK。
    python manage.py export --cfg algorithms/mmocr/config/textrecog/config.py

Step4 部署为在线服务

本次展示仅部署OCR服务, 包括本地部署和线上部署, 部署上线后调用部署服务进行本地图片的推理,获取水表的预测读数。部署在线服务,需要指定OBS桶以便保存部署所需要的文件。

  1. 修改“./algorithms/mmocr/config/textrecog/config.py”文件,配置为用户的OBS桶。
    # 替换为用户自己的OBS桶信息
    obs_bucket = 'obs://{your_obs_bucket_path}'
  1. 导出模型文件并修改rapidfuzz版本,然后本地部署。
    python manage.py export --cfg algorithms/mmocr/config/textrecog/config.py --is_deploy  # 导出部署模型所需文件

    修改“./export/robustscanner_r31_academic/Linux_x86_64_GPU_PyTorch_Common_py/res/requirements.txt”,将rapidfuzz版本修改为2.15.1

    图25 修改rapidfuzz版本为2.15.1

    python manage.py deploy --cfg algorithms/mmocr/config/textrecog/config.py  # 本地部署调试

本地部署成功后的输出结果

# 
...
[Conda environment created successfully.]
local_service_port is 127.0.0.1:42153
Deploying the local service ...
Successfully deployed the local service. You can check the log in /home/ma-user/work/water_meter/export/robustscanner_r31_academic/Linux_x86_64_GPU_PyTorch_Common_py/log.txt
[07/05 09:40:14][INFO][ma_cau-deployer.py 49]: {
 "text": "00326",
 "score": 0.9999999046325684
}
[07/05 09:40:14][INFO][ma_cau-deployer.py 59]: ************************ End Deployer ************************

  1. 本地部署成功后执行如下命令进行在线部署,大约需要十几分钟。
    python manage.py deploy --cfg algorithms/mmocr/config/textrecog/config.py --launch_remote

    部署成功后,任务会提交至ModelArts控制台的默认工作空间,在“部署上线 > 在线服务”页面会看到此任务。

    图26 部署为在线服务

Step5 清除资源和数据

通过此示例学习完成创建算法套件流程后,如果不再使用,建议您清除相关资源,避免造成资源浪费和不必要的费用。

  • 删除Notebook:在ModelArts“开发环境 > Notebook”界面,单击对应实例“操作”列的“更多 > 删除”
  • 删除数据:前往OBS,删除上传的数据,然后删除文件夹及OBS桶。
  • 停止在线服务:在ModelArts“部署上线 > 在线服务”界面,单击对应在线服务“操作”列的“更多 > 停止”
分享:

    相关文档

    相关产品