人工智能入门08-华为昇腾实习笔记-使用算法套件快速完成水表读数识别
5.29学习:
- 完成实践《使用算法套件快速完成水表读数识别》
本实验指导利用数据集,通过下载官方的算法套件(ivgSegmentation分割和OCR识别),借助notebook修改代码,来快速适配水表读数任务,并部署为在线服务进行读数预测。可以体验到"需求-数据-代码-训练-推理-上线"的AI开发全流程。
开篇
本实验是第一个进阶实验,官方教程:使用算法套件快速完成水表读数识别_AI开发平台ModelArts (huaweicloud.com),整体步骤如下:

官方说:本示例围绕真实AI需求场景,介绍算法开发套件在水表表盘读数识别算法开发任务上的使用流程。
Q:什么是算法开发套件?
A:就是用来解决实际问题的算法和让这些算法落地的配套设施。
算法开发套件中目前提供自研(ivg系列)和开源(mm系列)两系列,可应用于图片分类、物品检测、图片分割和OCR等任务。本示例中将组合使用自研分割算法IvgSegmentation和**开源OCR算法(mmOCR)**完成水表读数识别项目,并使用算法开发套件将其部署为在线服务。
准备工作
创建OBS桶并下载数据集
登录对象存储服务-控制台 (huaweicloud.com),创建OBS对象桶 test-bucket-xiaowang
,区域选择【华北-北京四】。
登录ModelArts - Console (huaweicloud.com),选择控制台区域也为【华北-北京四】,需要和OBS相同。
授权此前已经做过,允许ModelArts模型访问OBS,没有就参考配置访问授权(全局配置)添加授权。
下载本案例的数据集,水表表盘分割数据集和水表表盘读数OCR识别数据集到OBS桶中,下载方式都选择【对象存储服务(OBS)】。需要新建两个文件夹,分别为water_meter_segmentation
水表表盘分割数据集和water_meter_crop
水表表盘读数OCR识别数据集。

查看两个文件中的文件已经下载完成。


创建开发环境
在ModelArts - Console (huaweicloud.com)的【开发环境】-【Notebook】页面中,创建基于pytorch1.8-cuda10.2-cudnn7-ubuntu18.04
镜像,类型为GPU,规格选择Pnt1或Vnt1系列的Notebook。

创建成功后打开JupyterLab的Terminal。


操作过程
创建算法工程
在JupyterLab的Terminal中,在work目录下执行下面的命令创建工程。
ma-cli createproject |
之后根据提示输入工程名称,这里用water_meter
。
然后按回车键选择默认参数(总共连续按5次回车),之后选择跳过资产安装步骤,选择【6】。
进入工程目录。
cd water_meter |
执行以下命令复制项目数据从OBS到Notebook中。
本地分割数据集路径为./data/raw/water_meter_segmentation
,
本地读数OCR识别数据集为./data/raw/water_meter_crop
。
python manage.py copy --source obs://test-bucket-xiaowang/water_meter_crop --dest ./data/raw/water_meter_crop |

水表区域分割
执行如下命令安装ivgSegmentation套件(自研的分割算法套件)。
python manage.py install algorithm ivgSegmentation==1.0.2 |

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

水表表盘分割只需要区分背景和读数区域,因此属于二分类,需要根据项目所需数据集对配置文件进行修改,如下所示。
修改“config.py”文件。双击点击打开后即可修改。
... |
修改完后按Ctrl+S保存。

修改“deeplabv3_resnet50_standard-sample_512x1024.py”文件。
#注意gpu改为0 |
修改完按Ctrl+S保存。

在water_meter工程目录下,执行如下命令安装deeplabv3预训练模型。
python manage.py install model ivgSegmentation:deeplab/deeplabv3_resnet50_cityscapes_512x1024 |

执行如下命令训练分割模型,使用GPU进行训练。
python manage.py run --cfg algorithms/ivgSegmentation/config/sample/config.py --gpus 0 |
跑的过程中GPU资源会占用非常高,需要跑5-10分钟。

模型训练成功!

训练好的模型会保存在指定位置中,默认为./output/deeplabv3_resnet50_standard-sample_512x1024/checkpoints/
。
验证模型效果。模型训练完成后,可以在验证集上计算模型的指标,首先修改配置文件的模型位置。
修改“config.py”文件,修改完按Ctrl+S保存。
... |

执行如下命令计算模型指标。
python manage.py run --cfg algorithms/ivgSegmentation/config/sample/config.py --pipeline evaluate |
这一步也要等一下。

模型推理。模型推理能够指定某一张图片,并且推理出图片的分割区域,并进行可视化。
首先需要指定需要推理的图片路径。
修改“config.py”文件,修改完按Ctrl+S保存。
alg_cfg = dict( |

执行如下命令推理模型。
python manage.py run --cfg algorithms/ivgSegmentation/config/sample/config.py --pipeline infer |
推理输出的图片路径在./output/deeplabv3_resnet50_standard-sample_512x1024
下。


执行如下命令导出算法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

水表读数识别
执行如下命令安装mmocr套件。
python manage.py install algorithm mmocr==0.2.1 |

安装完后,“./algorithms/mmocr/config/textrecog”文件夹中包括config.py(算法外壳配置)和robustscanner_r31_academic.py(模型结构),需要根据所需算法和数据集路径修改配置文件。
以下以robust_scanner算法为例,修改“robustscanner_r31_academic.py”,如下所示:
... |


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

训练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 |
每一步都success就可以。
修改./algorithms/mmocr/config/textrecog/config.py
,将EPOCHS(迭代数量)改为2。
执行如下命令训练OCR模型。(使用GPU进行训练,大概需要几分钟)
python manage.py run --cfg algorithms/mmocr/config/textrecog/config.py |

训练好的模型会保存在指定位置中,默认为output/robustscanner_r31_academic/
文件夹中。
验证模型效果。模型训练完成后,可以在验证集上计算模型的指标。
首先修改配置文件的模型位置,修改./algorithms/mmocr/config/textrecog/config.py
。
... |
执行如下命令验证模型:
python manage.py run --cfg algorithms/mmocr/config/textrecog/config.py --pipeline evaluate |

模型推理。模型推理能够指定某一张图片,并且推理出图片的分割区域,并进行可视化。
首先需要指定待推理的图片路径,修改./algorithms/mmocr/config/textrecog/config.py
,具体如下。
... |
执行如下命令推理。
python manage.py run --cfg algorithms/mmocr/config/textrecog/config.py --pipeline infer |
推理输出的图片路径在output/robustscanner_r31_academic/vis
文件夹下。
最后,执行如下命令导出算法SDK。
python manage.py export --cfg algorithms/mmocr/config/textrecog/config.py |

部署为在线服务
本次展示仅部署OCR服务, 包括本地部署和线上部署两部分, 部署上线后调用部署服务进行本地图片的推理,以获取水表的预测读数。
首先,部署为在线服务,需要指定OBS桶以便保存部署所需要的文件。
修改./algorithms/mmocr/config/textrecog/config.py
文件,配置为用户的OBS桶。
# 替换为用户自己的OBS桶信息,这里我在OBS桶中新建了一个文件夹water_meter |
导出模型文件并修改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
rapidfuzz==2.15.1 |

执行以下命令进行本地部署调试,这需要一段时间。
python manage.py deploy --cfg algorithms/mmocr/config/textrecog/config.py |
本地部署成功后执行如下命令进行在线部署,大约需要十几分钟。
python manage.py deploy --cfg algorithms/mmocr/config/textrecog/config.py --launch_remote |

部署成功后,任务会提交至ModelArts控制台,在【部署上线】-【在线服务】页面会看到此任务。

然后进行预测,这里给几个水表图片,


清除资源和数据
删除Notebook。
删除OBS数据。
停止在线服务。