From c946ec318ae4910a5cd8f62de8f4efac3a773484 Mon Sep 17 00:00:00 2001 From: Tae-Young Chung Date: Fri, 16 Jul 2021 12:38:03 +0900 Subject: [PATCH] Remove unnecessary variables copying outputData, instead use outputData itself Change-Id: I03f67afaaa83042812de7323f9b90714ba37f80a Signed-off-by: Tae-Young Chung --- .../mv_inference/inference/src/Inference.cpp | 103 +++++++-------------- 1 file changed, 36 insertions(+), 67 deletions(-) diff --git a/mv_machine_learning/mv_inference/inference/src/Inference.cpp b/mv_machine_learning/mv_inference/inference/src/Inference.cpp index c7ca663..5ff3235 100755 --- a/mv_machine_learning/mv_inference/inference/src/Inference.cpp +++ b/mv_machine_learning/mv_inference/inference/src/Inference.cpp @@ -1243,13 +1243,9 @@ namespace inference top_result_pq; float value = 0.0f; - std::vector > inferDimInfo(outputData.dimInfo); - std::vector inferResults(outputData.data.begin(), - outputData.data.end()); - - int count = inferDimInfo[0][1]; + int count = outputData.dimInfo[0][1]; LOGI("count: %d", count); - float *prediction = reinterpret_cast(inferResults[0]); + float *prediction = reinterpret_cast(outputData.data[0]); for (int i = 0; i < count; ++i) { value = prediction[i]; @@ -1270,20 +1266,17 @@ namespace inference } std::reverse(top_results.begin(), top_results.end()); - int classIdx = -1; ImageClassificationResults results; results.number_of_classes = 0; - for (size_t idx = 0; idx < top_results.size(); ++idx) { - if (top_results[idx].first < mThreshold) + for (auto& result : top_results) { + if (result.first < mThreshold) continue; - LOGI("idx:%zu", idx); - LOGI("classIdx: %d", top_results[idx].second); - LOGI("classProb: %f", top_results[idx].first); - - classIdx = top_results[idx].second; - results.indices.push_back(classIdx); - results.confidences.push_back(top_results[idx].first); - results.names.push_back(mUserListName[classIdx]); + + LOGI("class Idx: %d, Prob: %.4f", result.second, result.first); + + results.indices.push_back(result.second); + results.confidences.push_back(result.first); + results.names.push_back(mUserListName[result.second]); results.number_of_classes++; } @@ -1372,12 +1365,6 @@ namespace inference // In case of object detection, // a model may apply post-process but others may not. // Thus, those cases should be hanlded separately. - std::vector > inferDimInfo(outputData.dimInfo); - LOGI("inferDimInfo size: %zu", outputData.dimInfo.size()); - - std::vector inferResults(outputData.data.begin(), - outputData.data.end()); - LOGI("inferResults size: %zu", inferResults.size()); float *boxes = nullptr; float *classes = nullptr; @@ -1395,7 +1382,7 @@ namespace inference number_of_detections = static_cast( *reinterpret_cast(outputData.data[0])); - cv::Mat cvOutputData(number_of_detections, inferDimInfo[0][3], + cv::Mat cvOutputData(number_of_detections, outputData.dimInfo[0][3], CV_32F, outputData.data[0]); // boxes @@ -1418,11 +1405,11 @@ namespace inference scores = cvScores.ptr(0); } else { - boxes = reinterpret_cast(inferResults[0]); - classes = reinterpret_cast(inferResults[1]); - scores = reinterpret_cast(inferResults[2]); + boxes = reinterpret_cast(outputData.data[0]); + classes = reinterpret_cast(outputData.data[1]); + scores = reinterpret_cast(outputData.data[2]); number_of_detections = - (int) (*reinterpret_cast(inferResults[3])); + (int) (*reinterpret_cast(outputData.data[3])); } LOGI("number_of_detections = %d", number_of_detections); @@ -1542,12 +1529,6 @@ namespace inference // In case of object detection, // a model may apply post-process but others may not. // Thus, those cases should be handled separately. - std::vector > inferDimInfo(outputData.dimInfo); - LOGI("inferDimInfo size: %zu", outputData.dimInfo.size()); - - std::vector inferResults(outputData.data.begin(), - outputData.data.end()); - LOGI("inferResults size: %zu", inferResults.size()); float *boxes = nullptr; float *classes = nullptr; @@ -1565,7 +1546,7 @@ namespace inference number_of_detections = static_cast( *reinterpret_cast(outputData.data[0])); - cv::Mat cvOutputData(number_of_detections, inferDimInfo[0][3], + cv::Mat cvOutputData(number_of_detections, outputData.dimInfo[0][3], CV_32F, outputData.data[0]); // boxes @@ -1588,11 +1569,11 @@ namespace inference scores = cvScores.ptr(0); } else { - boxes = reinterpret_cast(inferResults[0]); - classes = reinterpret_cast(inferResults[1]); - scores = reinterpret_cast(inferResults[2]); + boxes = reinterpret_cast(outputData.data[0]); + classes = reinterpret_cast(outputData.data[1]); + scores = reinterpret_cast(outputData.data[2]); number_of_detections = static_cast( - *reinterpret_cast(inferResults[3])); + *reinterpret_cast(outputData.data[3])); } int left, top, right, bottom; @@ -1707,30 +1688,22 @@ namespace inference return ret; } - std::vector > inferDimInfo(outputData.dimInfo); - std::vector inferResults(outputData.data.begin(), - outputData.data.end()); + int number_of_detections = outputData.dimInfo[0][1] >> 1; + float *loc = reinterpret_cast(outputData.data[0]); + results.number_of_landmarks = number_of_detections; + results.locations.resize(number_of_detections); - long number_of_detections = inferDimInfo[0][1]; - float *loc = reinterpret_cast(inferResults[0]); - - results.number_of_landmarks = 0; - - cv::Point point(0, 0); LOGI("imgW:%d, imgH:%d", mSourceSize.width, mSourceSize.height); - for (int idx = 0; idx < number_of_detections; idx += 2) { - point.x = static_cast(loc[idx] * mSourceSize.width); - point.y = static_cast(loc[idx + 1] * mSourceSize.height); - - results.locations.push_back(point); - results.number_of_landmarks++; + for (auto& point : results.locations) { + point.x = static_cast(*loc++ * mSourceSize.width); + point.y = static_cast(*loc++ * mSourceSize.height); LOGI("x:%d, y:%d", point.x, point.y); } *detectionResults = results; } - LOGE("Inference: FacialLandmarkDetectionResults: %d\n", + LOGI("Inference: FacialLandmarkDetectionResults: %d\n", results.number_of_landmarks); return MEDIA_VISION_ERROR_NONE; } @@ -1848,28 +1821,24 @@ namespace inference return ret; } - std::vector > inferDimInfo(outputData.dimInfo); - std::vector inferResults(outputData.data.begin(), - outputData.data.end()); - long number_of_poses = 1; - long number_of_landmarks = inferDimInfo[0][3]; - float *tmp = static_cast(inferResults[0]); - cv::Size heatMapSize(inferDimInfo[0][1], inferDimInfo[0][2]); + long number_of_landmarks = outputData.dimInfo[0][3]; + float *tmp = static_cast(outputData.data[0]); + cv::Size heatMapSize(outputData.dimInfo[0][1], outputData.dimInfo[0][2]); cv::Point loc; cv::Point2f loc2f; double score; cv::Mat blurredHeatMap; - cv::Mat reShapeTest(cv::Size(inferDimInfo[0][2], inferDimInfo[0][1]), - CV_32FC(inferDimInfo[0][3]), (void *) tmp); + cv::Mat reShapeTest(cv::Size(outputData.dimInfo[0][2], outputData.dimInfo[0][1]), + CV_32FC(outputData.dimInfo[0][3]), (void *) tmp); - cv::Mat multiChannels[inferDimInfo[0][3]]; + cv::Mat multiChannels[outputData.dimInfo[0][3]]; split(reShapeTest, multiChannels); - float ratioX = static_cast(inferDimInfo[0][2]); - float ratioY = static_cast(inferDimInfo[0][1]); + float ratioX = static_cast(outputData.dimInfo[0][2]); + float ratioY = static_cast(outputData.dimInfo[0][1]); if (mPoseResult == NULL) { if(!mUserListName.empty()) { -- 2.7.4