USAC fix: GraphCut fails to allocate big dense matrices#23073
Merged
asmorkalov merged 1 commit intoopencv:4.xfrom Jan 20, 2023
Merged
USAC fix: GraphCut fails to allocate big dense matrices#23073asmorkalov merged 1 commit intoopencv:4.xfrom
asmorkalov merged 1 commit intoopencv:4.xfrom
Conversation
5eb6618 to
2400eb7
Compare
Add `estimateSE2(...)`, `estimateSE3(...)`, `estimateSIM2(...)`, `estimateSIM3(...)` for estimating an geometric transformation with rotation and translation (with scaling for SIM) using USAC: as alternative for `estimateAffinePartial2D` and `estimateAffine3D`. Modified test module. Remove unused variables. Remove initializer of unused variable. Add interfaces to accept UsacParams() and corresponding test codes. Revise test code. PartialNd removed Umeyama rewritten for code quality & speed comments & minors rise number of points fix, and +30% faster! only one number should be that big remove USAC code, leave fix only big number
2400eb7 to
dbdd357
Compare
vpisarev
approved these changes
Jan 20, 2023
Merged
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
TODO:
Bug description
The bug arises in #22884 when setting a number of points to numbers like 60000 and bigger.
For N samples GraphCut tries to allocate an edge connectivity matrix of size NxN and segfaults on big numbers, see here.
Changes
The solution is to use
std::set<int>instead ofstd::vector<bool>.Despite theoretically longer read/write time, like O(log N) vs O(1), I've got +30% performance on my machine, probably because of CPU caching.
The bug reproducer is just a
usac_testUsacParams.accuracytest with biggerpts_size.Pull Request Readiness Checklist
See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request
Patch to opencv_extra has the same branch name.