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

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

img


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

  • 这篇博客: 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)。

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