mmsegmentation图像分割模型推理grpc调用服务,并通过bat脚本一键部署到新环境



背景说明

采用mmsegmentation对标注好的训练集图像进行训练,得到最终训练好的图像分割深度学习模型。为了将训练好的模型部署到应用环境,以实现模型推理,并进一步将推理结果用于后续业务分析。本项目从以下三个步骤来完成该项目目的:

  • 调用训练好的模型,编写业务处理代码,实现推理结果的进一步分析;
  • grpc服务搭建,实现跨平台、跨语言的项目服务调用;
  • 编写windows批处理脚本实现新环境的一键部署。

模型调用,业务代码编写

由于模型是采用mmseg进行训练的,调用仍采用mmseg相应的模型调用接口,以实现模型的调用。

针对模型的推理输出,编写业务代码,实现对推理结果进一步的业务处理。

grpc服务搭建

由于模型的调用服务代码均是在windowns平台采用python编写,为了使其能够满足跨平台、跨语言的服务调用,我们采用grpc搭建模型调用服务,使用protobuf对传输数据、请求数据以及响应数据进行定义。下面是本项目所定义的消息结构:

syntax = "proto3";


message ABImage {
    bytes data = 1;   // 图像字节
    int32 width = 2;  // 图像宽度
    int32 height = 3; // 图像高度
}

// 请求的参数
message PredictRequest{
    string model_path = 1;  // 模型所在路径
    string config_path = 2; // 模型配置文件所在路径
    string img_path = 3;    // 输入图像路径, 用于模型推理
    string redun_id = 4;    // 冗余输入头,标记

}

// 定义返回的参数
message PredictRespense{
    string redun_id = 1;
    bool is_error = 2;
    string error_message = 3;
    float res_g_ratio = 4;
    float res_y_ratio = 5;
    ABImage image = 6;
}


// 定义服务接口
service Predictor{
    rpc predict(PredictRequest) returns (PredictRespense){}
}

从定义的消息结构可看到,服务调用过程既可传输数值或者字符串型结果,也可传输图像结果。

windows批处理脚本一键部署

要将在开发环境编写完成的项目服务代码,部署到新环境中,需要解决以下几个问题:

  • 项目所需的软件安装包;
  • 项目的依赖包;
  • 服务的开启。

为了提高项目在新环境的服务部署效率,编写了一键部署脚本,仅需执行此脚本即可完成服务的部署和开启。

本项目所编写的batch脚本:

::-- Script to automate deploy deep learning model inferiing service to new environmenrt.
@REM 一键部署项目执行环境。使用方法:
@REM  - 1.手动安装anaconda安装包,直接next下去,直到安装完成。(注意有一步需要将其添加到环境变量)
@REM  - 2.在项目目录下打开anaconda窗口,在命令行输入脚本执行命令:.\easy_deploy.bat(windows批处理脚本)
@REM 优点在于,即可以执行DOS命令,也可以执行python环境命令

echo ============开始部署============

:: 1、配置anaconda的python执行环境
:: 根据conda安装地址相应修改
set CONDAPATH=D:\ProgramData\Anaconda
call %CONDAPATH%\Scripts\activate.bat %CONDAPATH%

:: 2、配置国内源,提高下载速度
call conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
call conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

:: 3、安装项目依赖包
pip install numpy terminaltables matplotlib tqdm pandas timm Pillow grpcio==1.49.0 protobuf==4.21.7 opencv_python_headless==4.5.5.64
pip install torch==1.10.0+cpu torchvision==0.11.0+cpu torchaudio==0.10.0 -f https://download.pytorch.org/whl/torch_stable.html
pip install mmcv-full==1.5.0 -f https://download.openmmlab.com/mmcv/dist/cpu/torch1.10.0/index.html
echo ============依赖包下载完成!============

:: 4、开启grpc服务端
python dl_server.py

echo ============服务启动完成!============

可以看到,该脚本可实现环境的配置、依赖包的下载以及服务的开启。需要注意的地方是,在调用每一个conda命令时,要在调用命令前加上call,否则脚本执行完该conda语句就会结束。

结论

本项目实现了以下三个主要功能:

  • 深度学习模型的调用推理;
  • grpc服务的搭建,实现跨平台、跨语言的服务搭建;
  • 提供批处理脚本,实现项目服务在新环境的部署与开启。

文章作者: 安立广
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 安立广 !
  目录