鲲鹏+银河麒麟
python3.7.8
paddlepaddle 2.3
PaddleOCR安装后,基础生成环境没有问题,能够正常输出。
装了hubservering进行服务化部署时,
执行预测时候,无响应,阻塞
不知道问题出在哪里,请大家指教。
鲲鹏+银河麒麟
python3.7.8
paddlepaddle 2.3
PaddleOCR安装后,基础生成环境没有问题,能够正常输出。
装了hubservering进行服务化部署时,
执行预测时候,无响应,阻塞
之所以要测试模型结构,是因为不同的模型的特征层是不一样,固定参数的分类层是无法适应到参数不一的特征层。笔者目前仅测试实现了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
根据输出结果(根据特征数和分类层name),在MyModel.py中创建分类层的结构,可以仿照图5的操作。
由于缺乏更加具体的信息,我无法确定问题的根源所在,但可能的原因如下:
针对这些可能的原因,我为您提供以下几种解决方案:
具体操作步骤:
(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)
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)
top
出现类似以下输出即表示服务正在运行:
(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)。
希望以上方案能够对您解决问题有所帮助,如果还有任何疑问,请随时联系我。