paddleServing目标检测深度学习模型在线部署教程

本文详细介绍如何在Ubuntu16.04环境下,使用PaddleServing进行模型部署,涵盖环境准备、模型转换、在线部署及远程测试全流程。通过实例演示,帮助读者掌握PaddleServing的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、准备环境

1.ubuntu16.04
2.python3.6
3.nvidia-docker2安装,参考链接(https://blog.youkuaiyun.com/weixin_40699155/article/details/106441047)
4.$ pip install paddle-serving-client -i https://mirror.baidu.com/pypi/simple

二、模型转换

模型必须是由save_inference_model接口存储。

1.利用PaddleDetection开发套件中export_serving_model.py
 $ python tools/export_serving_model.py \
          -c configs/yolov4/yolov4_cspdarknet_voc.yml \
          --output_dir=./inference_model \
          -o weights=output/yolov4_cspdarknet_voc/best_model
2.直接转化
  import paddle.fluid as fluid
  import paddle_serving_client.io as serving_io
  
  place = fluid.CUDAPlace(0)
  exe = fluid.Executor(place)
  #获取模型文件
  save_path="/path/to/model/"

  [infer_program,feeded_var_names,target_var]=fluid.io.load_inference_model(dirname=save_path,executor=exe)
  print("input",feeded_var_names)
  print("output",target_var)
  
  def build_input():
   image = fluid.layers.data(name='image', shape=image_shape, dtype='float32')
   im_info = fluid.layers.data(name="im_info", shape=[3], dtype='float32')
   im_shape = fluid.layers.data(name="im_shape", shape=[3], dtype='float32')
   return [image,im_shape]
  feed_list = build_input()
  feed_dict = {"image":feed_list[0],"im_info":feed_list[1]"im_shape":feed_list[2]}
  fetch_dict ={"outputs":target_var[0]}
  
  #保存serving需要的模型与配置文件,参数1是server端模型与配置文件保存的目录,参数2是client端配置文件保存的目录,参数3是输入dict,参数4是输出dict,参数5是模型的program
  serving_io.save_model("serving_server", "serving_client",
         feed_dict, fetch_dict, infer_program)

三、在线部署

1.拉取镜像
$ nvidia-docker pull hub.baidubce.com/paddlepaddle/serving:latest-gpu
2.启动镜像
$ nvidia-docker run -p 9292:9292 --name test -td hub.baidubce.com/paddlepaddle/serving:latest-gpu
3.进入镜像
$ docker exec -it test bash
4.安装paddle-serving-server-gpu
$ pip3 install paddle-serving-server-gpu -i https://mirror.baidu.com/pypi/simple
5.启动服务

注意:首次启动服务时,会自动安装paddle_serving_server_gpu模块

RPC service:
    $ python3 -m paddle_serving_server_gpu.serve --model serving_server --thread 10 --port 9292 --mem_optim true --ir_optim true >std.log 2>err.log &
参数说明:
    --model 指定部署模型文件夹路径
    --thread 使用线程
    --port 对外开放端口,这个要与启动镜像时的端口相同
    --mem_optim 开启内存/显存优化
    --ir_optim 开启计算图分析优化,包括OP融合等
    & 后端执行

四、远程测试

1) 安装预处理模块paddle_serving_app
   $ pip install paddle_serving_app -i https://mirror.baidu.com/pypi/simple
2) 测试代码
  from paddle_serving_client import Client
  from paddle_serving_app.reader import *
  import numpy as np
  
  图像预处理初始化
  preprocess = Sequential([
   File2Image(), BGR2RGB(), Div(255.0),
   Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225], False),
   Resize(800, 1333,1), Transpose((2, 0, 1)), PadStride(32)
  ])  
  图像后期处理初始化
  postprocess = RCNNPostprocess("label_list.txt", "output")  
  创建socket
  client = Client()
  client.load_client_config("serving_client/serving_client_conf.prototxt")
  连接socket
  client.connect(['127.0.0.1:10002'])
  im = preprocess('111.jpg')
  发出请求
  fetch_map = client.predict(feed={"image": im, "im_info": np.array(list(im.shape[1:]) + [1.0]),
           "im_shape": np.array(list(im.shape[1:]) + [1.0])}, fetch=["multiclass_nms_0.tmp_0"])
  fetch_map["image"] = '111.jpg'
  图像后期处理,测试结果最终保存在当前文件夹的output文件夹下
  postprocess(fetch_map)

注意:paddle_serving_app提供的图像预处理或后期处理结果可能与自己训练的模型存在偏差,需要到python安装包path/to/python3.6/site-packages/paddle_serving_app/reader/下修改image_reader.py文件

出现这个错误的原因是在导入seaborn包时,无法从typing模块中导入名为'Protocol'的对象。 解决这个问题的方法有以下几种: 1. 检查你的Python版本是否符合seaborn包的要求,如果不符合,尝试更新Python版本。 2. 检查你的环境中是否安装了typing_extensions包,如果没有安装,可以使用以下命令安装:pip install typing_extensions。 3. 如果你使用的是Python 3.8版本以下的版本,你可以尝试使用typing_extensions包来代替typing模块来解决该问题。 4. 检查你的代码是否正确导入了seaborn包,并且没有其他导入错误。 5. 如果以上方法都无法解决问题,可以尝试在你的代码中使用其他的可替代包或者更新seaborn包的版本来解决该问题。 总结: 出现ImportError: cannot import name 'Protocol' from 'typing'错误的原因可能是由于Python版本不兼容、缺少typing_extensions包或者导入错误等原因造成的。可以根据具体情况尝试上述方法来解决该问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [ImportError: cannot import name ‘Literal‘ from ‘typing‘ (D:\Anaconda\envs\tensorflow\lib\typing....](https://blog.youkuaiyun.com/yuhaix/article/details/124528628)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值