Comments (5)
The reason is that CUDA Textures have strict size limits. Until someone adds an alternative code path, the best we can do it giving a better and earlier warning. I propose PR#89 for that.
from popsift.
I was looking to the code and it seems that you upscale the image per default by a factor of 2.
If I choose a factor of 1, I have enough memory to extract the features.
Is there a big impact on accuracy by not upscaling the input image ?
The out of memory error comes from allocating an 3d array (cudaMalloc3DArray) of
width x upscale x height x upscale x (levels - 1)
Would it be possible to rather use (levels - 1) x 2d array instead ?
In this case, there should be enough memory in most common graphic card.
from popsift.
The upscaling by 2 is the default of the original SIFT paper.
From my understanding of the algorithm, you would lose the highest quality features because you must take the first image, blur it 4 times, then compute the 3 Difference-of-Gaussian layers, and then you can search for feature point candidates in the middle one of those 3. So ... quite a bit of more blurry than the original image. Upscaling fixes that problem.
The RTX 2080 has a quite large amount of memory, but it limits the maximum Surface2DLayered size to 65536 (bytes) × 32768 × 2048. Are you sure that memory allocation fails in your case and not the creation of the surface?
It is absolutely possible to use very much less memory at the price of slightly slower code. It was just never a goal for me. Several of the currently supported alternative downscaling approaches would not be supported in that case and feature points would have to be collected differently, but it could be done.
Unfortunately, I'm not able to do it in the foreseeable future.
from popsift.
You can adjust the SIFT params in popsift::Config
.
See setDownsampling
:
popsift/src/popsift/sift_conf.h
Line 104 in 8ea03b5
from popsift.
@fabiencastan config.setDownsampling(0);
solves my issue, Thanks
@griwodz thanks for the explanation, it does make sense.
the first allocation that failed is cudaMalloc3DArray in Octave::alloc_interm_array()
the maximum Surface2dLayered supported by my graphic card is 32768 x 32768 x 2048
from popsift.
Related Issues (20)
- [question] HOT 3
- Is popsift platform independent. HOT 2
- minor suggestions for code improvement HOT 5
- Could not get current device ID initialization error HOT 5
- [bug] Runtime HOT 6
- How to retrieve matches [question] HOT 3
- [question]how to get the xpos and ypos on the input image? HOT 2
- [question]how can I set config to extract the same features for same images? HOT 2
- [bug] s_filtergrid.cu does not compile missing thrust/host_vector.h header HOT 2
- [bug]cannot use thread_local specifier for a __constant__ variable ConsoleApplication1 E:\Desktop\VS-Test\09\ConsoleApplication1\popsift\gauss_filter.cu 21 HOT 2
- [request] using exception for error handling HOT 2
- Memory leak when running enqueue, job->get() in while loop HOT 9
- Doesn't build with cuda 12 HOT 1
- job->get() takes a long time(~200ms with default settings on a small image HOT 1
- [request] Support CUDA SDK 12.X HOT 1
- [ci] move ci to github actions HOT 1
- [request] Bringing PopSift implementation into OpenCV
- How to use popsift as API? HOT 3
- Cannot Reproduce OpenCV Descriptors
- [bug] PopSift build failure for CUDA >= 12.0 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from popsift.