Merge pull request #19552 from WeiChungChang:partialSort
authorWeiChungChang <r97922153@gmail.com>
Mon, 22 Feb 2021 16:44:00 +0000 (11:44 -0500)
committerGitHub <noreply@github.com>
Mon, 22 Feb 2021 16:44:00 +0000 (19:44 +0300)
apply partial sort to save computations

* apply partial sort

* fix typo

* fix accroding to CR

modules/dnn/src/layers/detection_output_layer.cpp

index 76142181ae466ce04acbfec96bb6f4b2917889ad..55ef36f95cba6aced082952698851b094c25ec8e 100644 (file)
@@ -611,8 +611,13 @@ public:
                 }
             }
             // Keep outputs k results per image.
-            std::sort(scoreIndexPairs.begin(), scoreIndexPairs.end(),
-                      util::SortScorePairDescend<std::pair<int, int> >);
+            if ((_keepTopK * 8) > scoreIndexPairs.size()) {
+                std::sort(scoreIndexPairs.begin(), scoreIndexPairs.end(),
+                          util::SortScorePairDescend<std::pair<int, int> >);
+            } else {
+                std::partial_sort(scoreIndexPairs.begin(), scoreIndexPairs.begin() + _keepTopK, scoreIndexPairs.end(),
+                          util::SortScorePairDescend<std::pair<int, int> >);
+            }
             scoreIndexPairs.resize(_keepTopK);
 
             std::map<int, std::vector<int> > newIndices;