From 3f4d0cf216632c7815be11b8a92a0e2e453ab037 Mon Sep 17 00:00:00 2001 From: zz990099 <771647586@qq.com> Date: Sat, 17 May 2025 22:44:50 +0800 Subject: [PATCH 1/2] Update easy_deploy_tool submodule version Signed-off-by: zz990099 <771647586@qq.com> --- easy_deploy_tool | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easy_deploy_tool b/easy_deploy_tool index 3f11dad..4247e56 160000 --- a/easy_deploy_tool +++ b/easy_deploy_tool @@ -1 +1 @@ -Subproject commit 3f11daded0528be572e130366883c4495dd5ef65 +Subproject commit 4247e56807677ddc14377c9f5d6cff38eb5946cb From fa86586def7fec978e2806071f7069e6ded8c46c Mon Sep 17 00:00:00 2001 From: zz990099 <771647586@qq.com> Date: Sat, 17 May 2025 22:45:21 +0800 Subject: [PATCH 2/2] improve[FoundationPose]: Adapt EasyDeployTool v2.0.0 Signed-off-by: zz990099 <771647586@qq.com> --- .../src/foundationpose.cpp | 106 ++++++++---------- .../src/foundationpose_utils.hpp | 8 +- 2 files changed, 51 insertions(+), 63 deletions(-) diff --git a/detection_6d_foundationpose/src/foundationpose.cpp b/detection_6d_foundationpose/src/foundationpose.cpp index c42cc9a..7163ac6 100644 --- a/detection_6d_foundationpose/src/foundationpose.cpp +++ b/detection_6d_foundationpose/src/foundationpose.cpp @@ -124,31 +124,18 @@ FoundationPose::FoundationPose(std::shared_ptr { // Check auto refiner_blobs_buffer = refiner_core->GetBuffer(true); - if (refiner_blobs_buffer->GetOuterBlobBuffer(RENDER_INPUT_BLOB_NAME).first == nullptr) + auto scorer_blobs_buffer = scorer_core->GetBuffer(true); + try { - LOG(ERROR) << "[FoundationPose] Failed to Construct FoundationPose since `renfiner_core` " - << "do not has a blob named `" << RENDER_INPUT_BLOB_NAME << "`."; - throw std::runtime_error("[FoundationPose] Failed to Construct FoundationPose"); - } - if (refiner_blobs_buffer->GetOuterBlobBuffer(TRANSF_INPUT_BLOB_NAME).first == nullptr) - { - LOG(ERROR) << "[FoundationPose] Failed to Construct FoundationPose since `renfiner_core` " - << "do not has a blob named `" << TRANSF_INPUT_BLOB_NAME << "`."; - throw std::runtime_error("[FoundationPose] Failed to Construct FoundationPose"); - } - - auto scorer_blobs_buffer = scorer_core->GetBuffer(true); - if (scorer_blobs_buffer->GetOuterBlobBuffer(RENDER_INPUT_BLOB_NAME).first == nullptr) - { - LOG(ERROR) << "[FoundationPose] Failed to Construct FoundationPose since `scorer_core` " - << "do not has a blob named `" << RENDER_INPUT_BLOB_NAME << "`."; - throw std::runtime_error("[FoundationPose] Failed to Construct FoundationPose"); - } - if (scorer_blobs_buffer->GetOuterBlobBuffer(TRANSF_INPUT_BLOB_NAME).first == nullptr) + refiner_blobs_buffer->GetTensor(RENDER_INPUT_BLOB_NAME); + refiner_blobs_buffer->GetTensor(TRANSF_INPUT_BLOB_NAME); + scorer_blobs_buffer->GetTensor(RENDER_INPUT_BLOB_NAME); + scorer_blobs_buffer->GetTensor(TRANSF_INPUT_BLOB_NAME); + } catch (const std::exception &e) { - LOG(ERROR) << "[FoundationPose] Failed to Construct FoundationPose since `scorer_core` " - << "do not has a blob named `" << TRANSF_INPUT_BLOB_NAME << "`."; - throw std::runtime_error("[FoundationPose] Failed to Construct FoundationPose"); + LOG(ERROR) << "[FoundationPose] Failed to Construct FoundationPose, ex : " << e.what(); + throw std::runtime_error("[FoundationPose] Failed to Construct FoundationPose, ex : " + + std::string(e.what())); } // preload modules @@ -210,7 +197,8 @@ bool FoundationPose::Register(const cv::Mat &rgb, MESSURE_DURATION_AND_CHECK_STATE(UploadDataToDevice(rgb, depth, mask, package), "[FoundationPose] SyncDetect Failed to upload data!!!"); - for (size_t i = 0 ; i < refine_itr ; ++ i) { + for (size_t i = 0; i < refine_itr; ++i) + { MESSURE_DURATION_AND_CHECK_STATE( RefinePreProcess(package), "[FoundationPose] SyncDetect Failed to execute RefinePreProcess!!!"); @@ -258,9 +246,10 @@ bool FoundationPose::Track(const cv::Mat &rgb, MESSURE_DURATION_AND_CHECK_STATE(UploadDataToDevice(rgb, depth, cv::Mat(), package), "[FoundationPose] Track Failed to upload data!!!"); - for (size_t i = 0 ; i < refine_itr ; ++ i) { - MESSURE_DURATION_AND_CHECK_STATE(RefinePreProcess(package), - "[FoundationPose] Track Failed to execute RefinePreProcess!!!"); + for (size_t i = 0; i < refine_itr; ++i) + { + MESSURE_DURATION_AND_CHECK_STATE( + RefinePreProcess(package), "[FoundationPose] Track Failed to execute RefinePreProcess!!!"); MESSURE_DURATION_AND_CHECK_STATE( refiner_core_->SyncInfer(package->GetInferBuffer()), @@ -337,30 +326,33 @@ bool FoundationPose::RefinePreProcess(const ParsingType &package) } // 2. render - if (package->refiner_blobs_buffer == nullptr) { + if (package->refiner_blobs_buffer == nullptr) + { package->refiner_blobs_buffer = refiner_core_->GetBuffer(true); } - const auto& refiner_blob_buffer = package->refiner_blobs_buffer; + const auto &refiner_blobs_buffer = package->refiner_blobs_buffer; // 设置推理前blob的输入位置为device,输出的blob位置为host端 - refiner_blob_buffer->SetBlobBuffer(RENDER_INPUT_BLOB_NAME, DataLocation::DEVICE); - refiner_blob_buffer->SetBlobBuffer(TRANSF_INPUT_BLOB_NAME, DataLocation::DEVICE); + refiner_blobs_buffer->GetTensor(RENDER_INPUT_BLOB_NAME)->SetBufferLocation(DataLocation::DEVICE); + refiner_blobs_buffer->GetTensor(TRANSF_INPUT_BLOB_NAME)->SetBufferLocation(DataLocation::DEVICE); - auto &refine_renderer = map_name2renderer_[package->target_name]; + auto &refine_renderer = map_name2renderer_[package->target_name]; CHECK_STATE( refine_renderer->RenderAndTransform( package->hyp_poses, package->rgb_on_device.get(), package->depth_on_device.get(), package->xyz_map_on_device.get(), package->input_image_height, package->input_image_width, - refiner_blob_buffer->GetOuterBlobBuffer(RENDER_INPUT_BLOB_NAME).first, - refiner_blob_buffer->GetOuterBlobBuffer(TRANSF_INPUT_BLOB_NAME).first, + refiner_blobs_buffer->GetTensor(RENDER_INPUT_BLOB_NAME)->RawPtr(), + refiner_blobs_buffer->GetTensor(TRANSF_INPUT_BLOB_NAME)->RawPtr(), refine_mode_crop_ratio_), "[FoundationPose] Failed to render and transform !!!"); // 3. 设置推理时形状 - const int input_poses_num = package->hyp_poses.size(); - refiner_blob_buffer->SetBlobShape(RENDER_INPUT_BLOB_NAME, - {input_poses_num, crop_window_H_, crop_window_W_, 6}); - refiner_blob_buffer->SetBlobShape(TRANSF_INPUT_BLOB_NAME, - {input_poses_num, crop_window_H_, crop_window_W_, 6}); - package->infer_buffer = refiner_blob_buffer; + const size_t input_poses_num = package->hyp_poses.size(); + refiner_blobs_buffer->GetTensor(RENDER_INPUT_BLOB_NAME) + ->SetShape({input_poses_num, static_cast(crop_window_H_), + static_cast(crop_window_W_), 6}); + refiner_blobs_buffer->GetTensor(TRANSF_INPUT_BLOB_NAME) + ->SetShape({input_poses_num, static_cast(crop_window_H_), + static_cast(crop_window_W_), 6}); + package->infer_buffer = refiner_blobs_buffer.get(); return true; } @@ -368,13 +360,9 @@ bool FoundationPose::RefinePreProcess(const ParsingType &package) bool FoundationPose::RefinePostProcess(const ParsingType &package) { // 获取refiner模型的缓存指针 - const auto &refiner_blob_buffer = package->refiner_blobs_buffer; - const auto _trans_ptr = refiner_blob_buffer->GetOuterBlobBuffer(REFINE_TRANS_OUT_BLOB_NAME).first; - const auto _rot_ptr = refiner_blob_buffer->GetOuterBlobBuffer(REFINE_ROT_OUT_BLOB_NAME).first; - const float *trans_ptr = static_cast(_trans_ptr); - const float *rot_ptr = static_cast(_rot_ptr); - CHECK_STATE(trans_ptr != nullptr, "[FoundationPose] RefinePostProcess got invalid trans_ptr !"); - CHECK_STATE(rot_ptr != nullptr, "[FoundationPose] RefinePostProcess got invalid rot_ptr !"); + const auto &refiner_blobs_buffer = package->refiner_blobs_buffer; + const auto trans_ptr = refiner_blobs_buffer->GetTensor(REFINE_TRANS_OUT_BLOB_NAME)->Cast(); + const auto rot_ptr = refiner_blobs_buffer->GetTensor(REFINE_ROT_OUT_BLOB_NAME)->Cast(); // 获取生成的假设位姿 const auto &hyp_poses = package->hyp_poses; @@ -419,39 +407,39 @@ bool FoundationPose::RefinePostProcess(const ParsingType &package) bool FoundationPose::ScorePreprocess(const ParsingType &package) { - auto scorer_blob_buffer = scorer_core_->GetBuffer(false); + auto scorer_blobs_buffer = scorer_core_->GetBuffer(false); // 获取对应的score_renderer // 设置推理前后blob输出的位置,这里输入输出都在device端 - scorer_blob_buffer->SetBlobBuffer(RENDER_INPUT_BLOB_NAME, DataLocation::DEVICE); - scorer_blob_buffer->SetBlobBuffer(TRANSF_INPUT_BLOB_NAME, DataLocation::DEVICE); - scorer_blob_buffer->SetBlobBuffer(SCORE_OUTPUT_BLOB_NAME, DataLocation::DEVICE); + scorer_blobs_buffer->GetTensor(RENDER_INPUT_BLOB_NAME)->SetBufferLocation(DataLocation::DEVICE); + scorer_blobs_buffer->GetTensor(TRANSF_INPUT_BLOB_NAME)->SetBufferLocation(DataLocation::DEVICE); + scorer_blobs_buffer->GetTensor(SCORE_OUTPUT_BLOB_NAME)->SetBufferLocation(DataLocation::DEVICE); + auto &score_renderer = map_name2renderer_[package->target_name]; CHECK_STATE( score_renderer->RenderAndTransform( package->hyp_poses, package->rgb_on_device.get(), package->depth_on_device.get(), package->xyz_map_on_device.get(), package->input_image_height, package->input_image_width, - scorer_blob_buffer->GetOuterBlobBuffer(RENDER_INPUT_BLOB_NAME).first, - scorer_blob_buffer->GetOuterBlobBuffer(TRANSF_INPUT_BLOB_NAME).first, - score_mode_crop_ratio_), + scorer_blobs_buffer->GetTensor(RENDER_INPUT_BLOB_NAME)->RawPtr(), + scorer_blobs_buffer->GetTensor(TRANSF_INPUT_BLOB_NAME)->RawPtr(), score_mode_crop_ratio_), "[FoundationPose] score_renderer RenderAndTransform Failed!!!"); - package->scorer_blobs_buffer = scorer_blob_buffer; - package->infer_buffer = scorer_blob_buffer; + package->scorer_blobs_buffer = scorer_blobs_buffer; + package->infer_buffer = scorer_blobs_buffer.get(); return true; } bool FoundationPose::ScorePostProcess(const ParsingType &package) { - const auto &scorer_blob_buffer = package->scorer_blobs_buffer; + const auto &scorer_blobs_buffer = package->scorer_blobs_buffer; // 获取scorer模型的输出缓存指针 - void *score_ptr = scorer_blob_buffer->GetOuterBlobBuffer(SCORE_OUTPUT_BLOB_NAME).first; + const auto score_ptr = scorer_blobs_buffer->GetTensor(SCORE_OUTPUT_BLOB_NAME)->Cast(); const auto &refine_poses = package->hyp_poses; const int poses_num = refine_poses.size(); // 获取置信度最大的refined_pose - int max_score_index = getMaxScoreIndex(nullptr, reinterpret_cast(score_ptr), poses_num); + int max_score_index = getMaxScoreIndex(nullptr, score_ptr, poses_num); package->actual_pose = refine_poses[max_score_index]; return true; diff --git a/detection_6d_foundationpose/src/foundationpose_utils.hpp b/detection_6d_foundationpose/src/foundationpose_utils.hpp index 31fe75a..362803a 100644 --- a/detection_6d_foundationpose/src/foundationpose_utils.hpp +++ b/detection_6d_foundationpose/src/foundationpose_utils.hpp @@ -58,16 +58,16 @@ struct FoundationPosePipelinePackage : public async_pipeline::IPipelinePackage { std::vector hyp_poses; // 保存refine阶段用的推理缓存 - std::shared_ptr refiner_blobs_buffer; + std::shared_ptr refiner_blobs_buffer; // 保存score阶段用的推理缓存 - std::shared_ptr scorer_blobs_buffer; + std::shared_ptr scorer_blobs_buffer; // 保存用于推理的blob_buffer - std::shared_ptr infer_buffer; + inference_core::BlobsTensor* infer_buffer; // **最终输出的位姿** // Eigen::Matrix4f actual_pose; - std::shared_ptr GetInferBuffer() + inference_core::BlobsTensor* GetInferBuffer() { return infer_buffer; }