PaddlePaddle / PaddleX

All-in-One Development Tool based on PaddlePaddle(飞桨低代码开发工具)
Apache License 2.0
4.91k stars 958 forks source link

部署实例分割推理多张图片时,内存涨幅过大 #1363

Closed spiderpigpig closed 2 years ago

spiderpigpig commented 2 years ago

Checklist:

  1. 查找历史相关issue寻求解答
  2. 翻阅FAQ常见问题汇总和答疑
  3. 确认bug是否在新版本里还未修复
  4. 翻阅PaddleX 部署文档说明

描述问题

cpu模式,使用c++部署实例分割,推理多张图片时,内存涨幅与推理图片数量正相关,输入三五张图片是可以正常推理的,但输入太多图片(如十张)时会因为内存不够而退出

复现

  1. c++部署方式

    • 您是否按照文档教程已经正常运行我们提供的demo? 是
    • 您是否在demo基础上修改代码内容?还请您提供运行的代码
      
      std::vector<std::string> imgs_path;
      // 获取文件夹下所有的图片路径
      FindFiles(std::string(current_path) + "/images/", imgs_path);

    if (!model->PaddleEngineInit(engine_config)) return -2;

    std::vector imgs; for (int i = 0; i < imgs_path.size(); i++) { std::cout << imgs_path[i] << std::endl; // prepare data imgs.push_back(std::move(cv::imread(imgs_path[i]))); //imgs.push_back(std::move(cv::imread(FLAGS_image))); // predict

    } std::vector results; if (!model->Predict(imgs, &results, 1)) return -3; for (int i = 0; i < imgs_path.size(); i++) { cv::Mat vis_seg; if (!Visualize(imgs[i], *(results[i].seg_result), &vis_seg, 2)) { continue; } std::string output = outputdir + filename(imgs_path[i]) + ".jpg"; cv::imwrite(output, vis_seg); } delete model;

  2. 您使用的模型数据集是? https://paddleseg.bj.bcebos.com/dygraph/humanseg/export/deeplabv3p_resnet50_os8_humanseg_512x512_100k_with_softmax.zip
  3. 请提供您出现的报错信息及相关log Error Message Summary: ResourceExhaustedError: Fail to alloc memory of 524288000 size.

环境

  1. 如果您使用的是c++或c#部署方式,请提供您使用的PaddleX分支、推理引擎(例如PaddleInference)版本号 c++ paddleX=2.1 PaddleInference=2.2.1(cpu)
  2. 请提供您使用的操作系统信息,如Linux/Windows/MacOS windows
FlyingQianMM commented 2 years ago

看您提供的模型是Deeplabv3p?该模型本身较大,同时推理的图像数量过大导致内存不足,这个符合预期。建议您在机器允许的条件下,选择合适的批量数量。