From 6c31198342244a6fb0aecb49d4bafe8ec6eff33c Mon Sep 17 00:00:00 2001 From: huangjianhui <852142024@qq.com> Date: Mon, 5 Dec 2022 09:57:54 +0800 Subject: [PATCH] [Other] Update deprecated segmentation apis && segmentation label map resize interinterpolation (#790) * Refactor PaddleSeg with preprocessor && postprocessor * Fix bugs * Delete redundancy code * Modify by comments * Refactor according to comments * Add batch evaluation * Add single test script * Add ppliteseg single test script && fix eval(raise) error * fix bug * Fix evaluation segmentation.py batch predict * Fix segmentation evaluation bug * Fix evaluation segmentation bugs * Update segmentation result docs * Update old predict api and DisableNormalizeAndPermute * Update resize segmentation label map with cv::INTER_NEAREST Co-authored-by: Jason --- examples/vision/segmentation/paddleseg/cpp/infer.cc | 6 +++--- .../segmentation/paddleseg/quantize/cpp/infer.cc | 2 +- .../vision/segmentation/paddleseg/rknpu2/cpp/infer.cc | 4 ++-- fastdeploy/vision/segmentation/ppseg/postprocessor.cc | 10 +++++++--- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/examples/vision/segmentation/paddleseg/cpp/infer.cc b/examples/vision/segmentation/paddleseg/cpp/infer.cc index d3c462704..28bb56009 100644 --- a/examples/vision/segmentation/paddleseg/cpp/infer.cc +++ b/examples/vision/segmentation/paddleseg/cpp/infer.cc @@ -37,7 +37,7 @@ void CpuInfer(const std::string& model_dir, const std::string& image_file) { auto im = cv::imread(image_file); fastdeploy::vision::SegmentationResult res; - if (!model.Predict(&im, &res)) { + if (!model.Predict(im, &res)) { std::cerr << "Failed to predict." << std::endl; return; } @@ -66,7 +66,7 @@ void GpuInfer(const std::string& model_dir, const std::string& image_file) { auto im = cv::imread(image_file); fastdeploy::vision::SegmentationResult res; - if (!model.Predict(&im, &res)) { + if (!model.Predict(im, &res)) { std::cerr << "Failed to predict." << std::endl; return; } @@ -96,7 +96,7 @@ void TrtInfer(const std::string& model_dir, const std::string& image_file) { auto im = cv::imread(image_file); fastdeploy::vision::SegmentationResult res; - if (!model.Predict(&im, &res)) { + if (!model.Predict(im, &res)) { std::cerr << "Failed to predict." << std::endl; return; } diff --git a/examples/vision/segmentation/paddleseg/quantize/cpp/infer.cc b/examples/vision/segmentation/paddleseg/quantize/cpp/infer.cc index 2611e2456..158a30263 100644 --- a/examples/vision/segmentation/paddleseg/quantize/cpp/infer.cc +++ b/examples/vision/segmentation/paddleseg/quantize/cpp/infer.cc @@ -34,7 +34,7 @@ void InitAndInfer(const std::string& model_dir, const std::string& image_file, auto im_bak = im.clone(); fastdeploy::vision::SegmentationResult res; - if (!model.Predict(&im, &res)) { + if (!model.Predict(im, &res)) { std::cerr << "Failed to predict." << std::endl; return; } diff --git a/examples/vision/segmentation/paddleseg/rknpu2/cpp/infer.cc b/examples/vision/segmentation/paddleseg/rknpu2/cpp/infer.cc index 9004828b7..bfc108d05 100644 --- a/examples/vision/segmentation/paddleseg/rknpu2/cpp/infer.cc +++ b/examples/vision/segmentation/paddleseg/rknpu2/cpp/infer.cc @@ -74,12 +74,12 @@ void InferHumanPPHumansegv2Lite(const std::string& device) { auto im = cv::imread(image_file); if (device == "npu") { - model.DisableNormalizeAndPermute(); + model.GetPreprocessor().DisableNormalizeAndPermute(); } fastdeploy::vision::SegmentationResult res; clock_t start = clock(); - if (!model.Predict(&im, &res)) { + if (!model.Predict(im, &res)) { std::cerr << "Failed to predict." << std::endl; return; } diff --git a/fastdeploy/vision/segmentation/ppseg/postprocessor.cc b/fastdeploy/vision/segmentation/ppseg/postprocessor.cc index a2acb8ef7..953cf2c68 100644 --- a/fastdeploy/vision/segmentation/ppseg/postprocessor.cc +++ b/fastdeploy/vision/segmentation/ppseg/postprocessor.cc @@ -280,13 +280,17 @@ bool PaddleSegPostprocessor::Run( FDMat mat; std::vector uint8_result_buffer; + // Resize interpration + int interpolation = cv::INTER_LINEAR; if (is_resized) { if (infer_results_dtype == FDDataType::INT64 || infer_results_dtype == FDDataType::INT32 ){ - FDTensorCast2Uint8(&infer_result, infer_chw, &uint8_result_buffer); - } + FDTensorCast2Uint8(&infer_result, infer_chw, &uint8_result_buffer); + // label map resize with nearest interpolation + interpolation = cv::INTER_NEAREST; + } mat = std::move(Mat::Create(infer_result, ProcLib::OPENCV)); - Resize::Run(&mat, input_width, input_height, -1.0f, -1.0f, 1, false, ProcLib::OPENCV); + Resize::Run(&mat, input_width, input_height, -1.0f, -1.0f, interpolation, false, ProcLib::OPENCV); mat.ShareWithTensor(&infer_result); } result->shape = infer_result.shape;