Hw0307 2023-04-28 14:53 采纳率: 57.1%
浏览 17
已结题

Paddlepaddle执行预测时候,无响应,阻塞

鲲鹏+银河麒麟
python3.7.8
paddlepaddle 2.3
PaddleOCR安装后,基础生成环境没有问题,能够正常输出。
装了hubservering进行服务化部署时,
执行预测时候,无响应,阻塞

img


不知道问题出在哪里,请大家指教。

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-28 16:25
    关注
    • 这篇博客: paddlepaddle 14 迁移学习-图像分类实战一 基于paddle2(paddle.hub)实现动态图的迁移学习中的 3.1 测试模型结构 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 之所以要测试模型结构,是因为不同的模型的特征层是不一样,固定参数的分类层是无法适应到参数不一的特征层。笔者目前仅测试实现了resnext50_32x4d、resnext101_32x4d、mobilenetv2_x1_5、mobilenetv2_x0_5和densenet121。此外,在进行分类层替换时不同网络模型的分类层name不一样。全部可用的模型为:

      PaddleClas models: ['alexnet', 'darknet53', 'densenet121', 'densenet161', 'densenet169', 'densenet201', 'densenet264', 'googlenet', 'inceptionv3', 'inceptionv4', 'mobilenetv1', 'mobilenetv1_x0_25', 'mobilenetv1_x0_5', 'mobilenetv1_x0_75', 'mobilenetv2_x0_25', 'mobilenetv2_x0_5', 'mobilenetv2_x0_75', 'mobilenetv2_x1_5', 'mobilenetv2_x2_0', 'mobilenetv3_large_x0_35', 'mobilenetv3_large_x0_5', 'mobilenetv3_large_x0_75', 'mobilenetv3_large_x1_0', 'mobilenetv3_large_x1_25', 'mobilenetv3_small_x0_35', 'mobilenetv3_small_x0_5', 'mobilenetv3_small_x0_75', 'mobilenetv3_small_x1_0', 'mobilenetv3_small_x1_25', 'ppclas_init', 'resnet101', 'resnet152', 'resnet18', 'resnet34', 'resnet50', 'resnext101_32x4d', 'resnext101_64x4d', 'resnext152_32x4d', 'resnext152_64x4d', 'resnext50_32x4d', 'resnext50_64x4d', 'shufflenetv2_x0_25', 'squeezenet1_0', 'squeezenet1_1', 'vgg11', 'vgg13', 'vgg16', 'vgg19']

      执行以下代码后可以轻松的或者各种模型的结构

      from MyModel import get_model,reset_fc
      model = get_model(name="densenet121",pretrained=False,test=True)
      print(model)

      执行结果如图4所示,可见分类层的name为out,其输入的特征数为1024

      图4 分类层的特征数和name

       根据输出结果(根据特征数和分类层name),在MyModel.py中创建分类层的结构,可以仿照图5的操作。

      图5 创建新的全连接层
    • 以下回答由chatgpt基于相关博客总结生成:

      由于缺乏更加具体的信息,我无法确定问题的根源所在,但可能的原因如下:

      1. HubServing的配置不正确,导致服务无法正常启动;
      2. 输入数据格式不正确,无法被模型识别;
      3. 网络或计算资源不足,导致推理时出现阻塞或无响应现象;
      4. 模型或PaddleOCR库本身存在bug。

      针对这些可能的原因,我为您提供以下几种解决方案:

      1. 检查HubServing的配置文件是否正确,确认可用端口是否冲突,重新启动HubServing服务;
      2. 参考PaddleOCR官方文档,检查输入数据的格式是否正确,特别是图片的尺寸、通道数等;
      3. 查看运行环境的CPU和内存使用情况,确保计算资源足够支撑PaddleOCR服务推理,如果需要可以升级硬件设备;
      4. 如果以上三个方面都检查无误,可以通过阅读PaddleOCR源码或提交bug报告来解决可能存在的PaddleOCR库的问题。

      具体操作步骤:

      1. 针对方案一,可以参考如下步骤配置HubServing:

      (1) 安装PaddleServing CLI

      pip install paddle-serving-cli
      

      (2) 创建一个新的hub-serving镜像

      python -m paddle_serving_server.serve \
          --model hub://paddleocr_mobile \
          --port 9292 \
          --name paddleocr_serving
      

      (3) 启动服务

      python -m paddle_serving_server.serve \
          --port 9292 \
          --name paddleocr_serving
      

      (4) 使用PaddleServing-Client进行查询:

      from paddle_serving_client import Predictor
      
      client = Predictor()
      client.init_client_config({
          "client": {
              "use_key": True
          },
          "model": {
              "name": "paddleocr_serving",
              "type": "hub",
              "signature_name": "ocr",
              "use_key": True
          },
          "server": {
              "address": "127.0.0.1",
              "port": 9292,
              "timeout": 5
          }
      })
      
      input_dict = {"image": "/path/to/your/image.jpg"}
      resp = client.predict(input_dict)
      print(resp)
      
      1. 针对方案二,可以先使用PaddleOCR自带的测试样例对模型进行测试:
      python3 tools/infer/predict_system.py \
          --image_dir="./doc/imgs_en/11.jpg" \
          --det_model_dir="./inference/ch_ppocr_server_v2.0_det_infer/" \
          --rec_model_dir="./inference/ch_ppocr_server_v2.0_rec_infer/" \
          --cls_model_dir="./inference/ch_ppocr_mobile_v2.0_cls_infer/"
      

      如果测试通过,可以通过PaddleOCR源代码中的各种预处理操作验证自己提供给模型的数据是否正确。可以如下方式调试:

      from paddleocr import PaddleOCR, draw_ocr
      import cv2
      from PIL import Image
      
      img_path = 'test_image.jpg'
      
      # 读取原始图片
      src_img = cv2.imread(img_path)
      
      # 图像预处理
      image = Image.fromarray(src_img).convert('RGB')
      img_list = [image]
      
      ocr = PaddleOCR(lang="ch")
      result = ocr.ocr(img_list=img_list, rec=True)
      
      # 将结果可视化
      for index, item in enumerate(result):
          for res in item:
              print(res.data)
      
      1. 针对方案三,可以使用top命令实时监测CPU和内存使用情况:
      top
      

      出现类似以下输出即表示服务正在运行:

      top command output

      1. 如果以上三个方案都不奏效,可以参考PaddleOCR源码,查找可能存在的bug,或者提交bug报告。详细的操作步骤参考如下:

      (1)下载PaddleOCR源码:

      git clone https://github.com/PaddlePaddle/PaddleOCR.git
      

      (2) 安装所需的Python包:

      pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
      

      (3) 在源码目录下运行测试用例:

      sh test.sh
      

      (4) 文件中每一个.py 对应着一个PaddleOCR文档中介绍的使用案例,运行这些py文件进行更加详细的测试

      (5) 如果发现可复现的bug,可以将使用代码和复现步骤提交到Github Issue,或者直接向PaddleOCR开发团队发起PR(Pull Request)。

      希望以上方案能够对您解决问题有所帮助,如果还有任何疑问,请随时联系我。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月6日
  • 已采纳回答 4月28日
  • 修改了问题 4月28日
  • 创建了问题 4月28日

悬赏问题

  • ¥50 求一位精通京东相关开发的专家
  • ¥100 求懂行的大ge给小di解答下!
  • ¥15 pcl运行在qt msvc2019环境运行效率低于visual studio 2019
  • ¥15 MAUI,Zxing扫码,华为手机没反应。可提高悬赏
  • ¥15 python运行报错 ModuleNotFoundError: No module named 'torch'
  • ¥100 华为手机私有App后台保活
  • ¥15 sqlserver中加密的密码字段查询问题
  • ¥20 有谁能看看我coe文件到底哪儿有问题吗?
  • ¥20 我的这个coe文件到底哪儿出问题了
  • ¥15 matlab使用自定义函数时一直报错输入参数过多