Git Product home page Git Product logo

popsift's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

popsift's Issues

Segmentation fault (core dumped) error in Ubuntu 16.04 while executing popsift-demo

Getting an error of Segmentation fault (core dumped)
on running the popsift-demo.
like : popsift-demo -i /home/kunal/Downloads/input_1.png
I am using the popsift provided here https://github.com/acmmmsys/2018-PopSift

Others: CUDA 11
I am using boost 1.70
cmake 3.13
Ubuntu: 16.04

It was working inititally, but a day later I started getting this error. I tried rebuilding the popsift-demo file, but I got the same result.

Kindly let me know if somebody is facing the same issue. Do let me know how i can improve my question.

[question] Feature matching across multiple frames

I am trying to do a feature matching across a small sequence of frames - basically a keypoint tracking. In the end, I'd like to get a list of positions for each keypoint in each frame. The frames are from a video sequence with small movements.

I managed to integrate the keypoint extraction sucessfuly, but I don't really understand how feature matching works - it seems to me that the only functionality is provided in FeaturesDev::match (as per the match example), which simply calls the show_distance function, without any way of extracting the data.

Am I missing something? Is there any additional functionality in the library that I am missing?

CMake: Demo program not built as PIE

Caught by rpmlint:

popsift.x86_64: W: position-independent-executable-suggested /usr/bin/popsift-demo
This executable should be position independent (all binaries should).  Check
that it is built with -fPIE/-fpie in compiler flags and -pie in linker flags.

This happens despite enabling PopSift_USE_POSITION_INDEPENDENT_CODE.
CMake 3.11.4.

no descriptors extracted if i set the deviceInfo ( speed is not stable) [bug]

Describe the bug
i can extract descriptors by using popsift-demo, but after i modified the code in line 302 of src/application/main.cpp (deviceInfo.set( 0, print_dev_info ) → deviceInfo.set( 1, print_dev_info ) ) , there is no descriptors extracted even i used the same image.

this is the error log:
Warning: no descriptors extracted
Number of feature points: 0 number of feature descriptors: 0


i also modified some other code in the main.cpp, this is the whole code which i modified:

std::cout << "PopSift version: " << POPSIFT_VERSION_STRING << std::endl;

//try {
//    parseargs( argc, argv, config, inputFile ); // Parse command line
//    std::cout << inputFile << std::endl;
//}
//catch (std::exception& e) {
//    std::cout << e.what() << std::endl;
//    return EXIT_FAILURE;
//}

//if( boost::filesystem::exists( inputFile ) ) {
//    if( boost::filesystem::is_directory( inputFile ) ) {
//        cout << "BOOST " << inputFile << " is directory" << endl;
//        collectFilenames( inputFiles, inputFile );
//        if( inputFiles.empty() ) {
//            cerr << "No files in directory, nothing to do" << endl;
//            return EXIT_SUCCESS;
//        }
//    } else if( boost::filesystem::is_regular_file( inputFile ) ) {
//        inputFiles.push_back( inputFile );
//    } else {
//        cout << "Input file is neither regular file nor directory, nothing to do" << endl;
//        return EXIT_FAILURE;
//    }
//}

for (int i = 0; i < 300; ++i)
	inputFiles.push_back("/data/dingjianbiao/popsift-develop/left_img2.pgm");

popsift::cuda::device_prop_t deviceInfo;
deviceInfo.set( 1, print_dev_info );
if( print_dev_info ) deviceInfo.print( );

MSVS2017 x64 cant build w/vcpkg

1>------ Build started: Project: popsift-demo, Configuration: Release x64 ------
2>------ Build started: Project: popsift-match, Configuration: Release x64 ------
2>   Creating library D:/Dev/xlibs/popsift/build/src/application/Release/popsift-match.lib and object D:/Dev/xlibs/popsift/build/src/application/Release/popsift-match.exp
1>   Creating library D:/Dev/xlibs/popsift/build/src/application/Release/popsift-demo.lib and object D:/Dev/xlibs/popsift/build/src/application/Release/popsift-demo.exp
2>match.obj : error LNK2019: unresolved external symbol __imp_ilutRenderer referenced in function "public: static void __cdecl ilOgl::Init(void)" (?Init@ilOgl@@SAXXZ)
2>match.obj : error LNK2019: unresolved external symbol __imp_ilutGLBindTexImage referenced in function "public: static unsigned int __cdecl ilOgl::BindTex(class ilImage &)" (?BindTex@ilOgl@@SAIAEAVilImage@@@Z)
2>match.obj : error LNK2019: unresolved external symbol __imp_ilutGLBuildMipmaps referenced in function "public: static unsigned int __cdecl ilOgl::Mipmap(class ilImage &)" (?Mipmap@ilOgl@@SAIAEAVilImage@@@Z)
2>match.obj : error LNK2019: unresolved external symbol __imp_ilutGLScreen referenced in function "public: static unsigned char __cdecl ilOgl::Screen(void)" (?Screen@ilOgl@@SAEXZ)
2>match.obj : error LNK2019: unresolved external symbol __imp_ilutGLScreenie referenced in function "public: static unsigned char __cdecl ilOgl::Screenie(void)" (?Screenie@ilOgl@@SAEXZ)
2>match.obj : error LNK2019: unresolved external symbol __imp_ilutGLTexImage referenced in function "public: static unsigned char __cdecl ilOgl::Upload(class ilImage &,unsigned int)" (?Upload@ilOgl@@SAEAEAVilImage@@I@Z)
2>match.obj : error LNK2019: unresolved external symbol __imp_ilutConvertToHBitmap referenced in function "public: static struct HBITMAP__ * __cdecl ilWin32::Convert(class ilImage &)" (?Convert@ilWin32@@SAPEAUHBITMAP__@@AEAVilImage@@@Z)
2>match.obj : error LNK2019: unresolved external symbol __imp_ilutGetBmpInfo referenced in function "public: static void __cdecl ilWin32::GetInfo(class ilImage &,struct tagBITMAPINFO *)" (?GetInfo@ilWin32@@SAXAEAVilImage@@PEAUtagBITMAPINFO@@@Z)
2>match.obj : error LNK2019: unresolved external symbol __imp_ilutGetHPal referenced in function "public: static struct HPALETTE__ * __cdecl ilWin32::GetPal(class ilImage &)" (?GetPal@ilWin32@@SAPEAUHPALETTE__@@AEAVilImage@@@Z)
2>match.obj : error LNK2019: unresolved external symbol __imp_ilutGetPaddedData referenced in function "public: static unsigned char * __cdecl ilWin32::GetPadData(class ilImage &)" (?GetPadData@ilWin32@@SAPEAEAEAVilImage@@@Z)
2>match.obj : error LNK2019: unresolved external symbol __imp_ilutGetWinClipboard referenced in function "public: static unsigned char __cdecl ilWin32::GetClipboard(class ilImage &)" (?GetClipboard@ilWin32@@SAEAEAVilImage@@@Z)
2>match.obj : error LNK2019: unresolved external symbol __imp_ilutLoadResource referenced in function "public: static unsigned char __cdecl ilWin32::GetResource(class ilImage &,struct HINSTANCE__ *,int,char *)" (?GetResource@ilWin32@@SAEAEAVilImage@@PEAUHINSTANCE__@@HPEAD@Z)
2>match.obj : error LNK2019: unresolved external symbol __imp_ilutSetWinClipboard referenced in function "public: static unsigned char __cdecl ilWin32::SetClipboard(class ilImage &)" (?SetClipboard@ilWin32@@SAEAEAVilImage@@@Z)
2>D:\Dev\xlibs\popsift\build\Release\popsift-match.exe : fatal error LNK1120: 13 unresolved externals
2>Done building project "popsift-match.vcxproj" -- FAILED.
1>main.obj : error LNK2019: unresolved external symbol __imp_ilutRenderer referenced in function "public: static void __cdecl ilOgl::Init(void)" (?Init@ilOgl@@SAXXZ)
1>main.obj : error LNK2019: unresolved external symbol __imp_ilutGLBindTexImage referenced in function "public: static unsigned int __cdecl ilOgl::BindTex(class ilImage &)" (?BindTex@ilOgl@@SAIAEAVilImage@@@Z)
1>main.obj : error LNK2019: unresolved external symbol __imp_ilutGLBuildMipmaps referenced in function "public: static unsigned int __cdecl ilOgl::Mipmap(class ilImage &)" (?Mipmap@ilOgl@@SAIAEAVilImage@@@Z)
1>main.obj : error LNK2019: unresolved external symbol __imp_ilutGLScreen referenced in function "public: static unsigned char __cdecl ilOgl::Screen(void)" (?Screen@ilOgl@@SAEXZ)
1>main.obj : error LNK2019: unresolved external symbol __imp_ilutGLScreenie referenced in function "public: static unsigned char __cdecl ilOgl::Screenie(void)" (?Screenie@ilOgl@@SAEXZ)
1>main.obj : error LNK2019: unresolved external symbol __imp_ilutGLTexImage referenced in function "public: static unsigned char __cdecl ilOgl::Upload(class ilImage &,unsigned int)" (?Upload@ilOgl@@SAEAEAVilImage@@I@Z)
1>main.obj : error LNK2019: unresolved external symbol __imp_ilutConvertToHBitmap referenced in function "public: static struct HBITMAP__ * __cdecl ilWin32::Convert(class ilImage &)" (?Convert@ilWin32@@SAPEAUHBITMAP__@@AEAVilImage@@@Z)
1>main.obj : error LNK2019: unresolved external symbol __imp_ilutGetBmpInfo referenced in function "public: static void __cdecl ilWin32::GetInfo(class ilImage &,struct tagBITMAPINFO *)" (?GetInfo@ilWin32@@SAXAEAVilImage@@PEAUtagBITMAPINFO@@@Z)
1>main.obj : error LNK2019: unresolved external symbol __imp_ilutGetHPal referenced in function "public: static struct HPALETTE__ * __cdecl ilWin32::GetPal(class ilImage &)" (?GetPal@ilWin32@@SAPEAUHPALETTE__@@AEAVilImage@@@Z)
1>main.obj : error LNK2019: unresolved external symbol __imp_ilutGetPaddedData referenced in function "public: static unsigned char * __cdecl ilWin32::GetPadData(class ilImage &)" (?GetPadData@ilWin32@@SAPEAEAEAVilImage@@@Z)
1>main.obj : error LNK2019: unresolved external symbol __imp_ilutGetWinClipboard referenced in function "public: static unsigned char __cdecl ilWin32::GetClipboard(class ilImage &)" (?GetClipboard@ilWin32@@SAEAEAVilImage@@@Z)
1>main.obj : error LNK2019: unresolved external symbol __imp_ilutLoadResource referenced in function "public: static unsigned char __cdecl ilWin32::GetResource(class ilImage &,struct HINSTANCE__ *,int,char *)" (?GetResource@ilWin32@@SAEAEAVilImage@@PEAUHINSTANCE__@@HPEAD@Z)
1>main.obj : error LNK2019: unresolved external symbol __imp_ilutSetWinClipboard referenced in function "public: static unsigned char __cdecl ilWin32::SetClipboard(class ilImage &)" (?SetClipboard@ilWin32@@SAEAEAVilImage@@@Z)
1>D:\Dev\xlibs\popsift\build\Release\popsift-demo.exe : fatal error LNK1120: 13 unresolved externals
1>Done building project "popsift-demo.vcxproj" -- FAILED.
3>------ Build started: Project: INSTALL, Configuration: Release x64 ------
3>-- Install configuration: "Release"
3>CMake Error at src/cmake_install.cmake:39 (file):
3>  file cannot create directory: C:/Program Files (x86)/PopSift/lib.  Maybe
3>  need administrative privileges.
3>Call Stack (most recent call first):
3>  cmake_install.cmake:37 (include)
3>
3>
3>D:\dev\msvs2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(138,5): error MSB3073: The command "setlocal
3>D:\dev\msvs2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(138,5): error MSB3073: D:\Dev\CMake\bin\cmake.exe -DBUILD_TYPE=Release -P cmake_install.cmake
3>D:\dev\msvs2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(138,5): error MSB3073: if %errorlevel% neq 0 goto :cmEnd
3>D:\dev\msvs2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(138,5): error MSB3073: :cmEnd
3>D:\dev\msvs2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(138,5): error MSB3073: endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
3>D:\dev\msvs2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(138,5): error MSB3073: :cmErrorLevel
3>D:\dev\msvs2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(138,5): error MSB3073: exit /b %1
3>D:\dev\msvs2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(138,5): error MSB3073: :cmDone
3>D:\dev\msvs2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(138,5): error MSB3073: if %errorlevel% neq 0 goto :VCEnd
3>D:\dev\msvs2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(138,5): error MSB3073: :VCEnd" exited with code 1.
3>Done building project "INSTALL.vcxproj" -- FAILED.
========== Build: 0 succeeded, 3 failed, 3 up-to-date, 0 skipped ==========

How to use it on windows machines ?

I want to use popsift on windows machine.
I have got the following error:

D:\CommonSDK\boost-sdk\boost/config/compiler/nvcc.hpp(23): fatal error C1017: invalid integer constant expression

GPU memory requirements.

I have a Nvidia GTX 1050 with 2GB memory. In my case PopSift works without problems for images up to 1920x1080 resolution (with default parameters). If the image resolution is any bigger, than i get the following error (sometimes i also get some other errors, but always memory related) :

Could not allocate 3D DoG array: out of memory

In order to work with bigger images i tried tweaking some parameters. I set _max_extrema parameter to 20000 (description says it changes memory requirements). I also changed octaves to 3. The problem is that these tweaks did not really change the memory requirements. For example i cannot get it to work for 2048x1536 no matter how low I set these two parameters.

So my question is if there is any way to reduce the memory requirements by setting some other parameters for example, or maybe even do some simple modifications to the code. I know 2GB of memory is not a lot, but to me it seems it should be enough to just extract features from a single image.

[question]

Hi,

Is there any way of seeing the images after matching, where one can see the correspondences between 2 images.

I wish to visualize the data after popsift-match.

I am trying to use opencv but currently, thats turing out to be little tricky. Is it possible to download the accepted matches to the CPU directly. Then i can plot them. If there is any other alternative or popsift function that I am missing here. Kindly let me know

[bug] Runtime

Describe the bug
Debug Multithread runtime library in debug (/MDd) mode replaced by the release one (/MD) which result in a link error.

To Reproduce
Steps to reproduce the behavior:

  1. CMake for Visual Studio 2019, arch x64 and BUILD_SHARED_LIBS=True, PopSift_BUILD_EXAMPLES=False
  2. Load the .sln in Visual Studio 2019,
  3. rebuild in debug mode for x64,
  4. See warning related to substitution of /MDd by /MD and the final error message

Expected behavior
When building in debug mode, warnings inform that the Multithread runtime library in debug mode (/MDd) is substituted by the realase one (/MD). This results in a link error LNK2038 avoiding to build popsift in debug mode.
In Visual Studio, by forcing /MD in the project settings (C/C++- Code generation) in debug mode, the project builds.

Log
warning message:

2>cl  : Ligne de commande warning D9025 : substitution de '/MDd' par '/MD'

error message:

2>popsift_generated_features.cu.obj : error LNK2038: discordance détectée pour '_ITERATOR_DEBUG_LEVEL' : la valeur '0' ne correspond pas à la valeur '2' in popsift.obj
2>popsift_generated_features.cu.obj : error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MD_DynamicRelease' ne correspond pas à la valeur 'MDd_DynamicDebug' in popsift.obj
2>popsift_generated_sift_constants.cu.obj : error LNK2038: discordance détectée pour '_ITERATOR_DEBUG_LEVEL' : la valeur '0' ne correspond pas à la valeur '2' in popsift.obj
2>popsift_generated_sift_constants.cu.obj : error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MD_DynamicRelease' ne correspond pas à la valeur 'MDd_DynamicDebug' in popsift.obj
2>popsift_generated_sift_conf.cu.obj : error LNK2038: discordance détectée pour '_ITERATOR_DEBUG_LEVEL' : la valeur '0' ne correspond pas à la valeur '2' in popsift.obj
2>popsift_generated_sift_conf.cu.obj : error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MD_DynamicRelease' ne correspond pas à la valeur 'MDd_DynamicDebug' in popsift.obj
2>popsift_generated_gauss_filter.cu.obj : error LNK2038: discordance détectée pour '_ITERATOR_DEBUG_LEVEL' : la valeur '0' ne correspond pas à la valeur '2' in popsift.obj
2>popsift_generated_gauss_filter.cu.obj : error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MD_DynamicRelease' ne correspond pas à la valeur 'MDd_DynamicDebug' in popsift.obj
2>popsift_generated_s_image.cu.obj : error LNK2038: discordance détectée pour '_ITERATOR_DEBUG_LEVEL' : la valeur '0' ne correspond pas à la valeur '2' in popsift.obj
2>popsift_generated_s_image.cu.obj : error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MD_DynamicRelease' ne correspond pas à la valeur 'MDd_DynamicDebug' in popsift.obj
2>popsift_generated_sift_pyramid.cu.obj : error LNK2038: discordance détectée pour '_ITERATOR_DEBUG_LEVEL' : la valeur '0' ne correspond pas à la valeur '2' in popsift.obj
2>popsift_generated_sift_pyramid.cu.obj : error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MD_DynamicRelease' ne correspond pas à la valeur 'MDd_DynamicDebug' in popsift.obj
2>popsift_generated_sift_octave.cu.obj : error LNK2038: discordance détectée pour '_ITERATOR_DEBUG_LEVEL' : la valeur '0' ne correspond pas à la valeur '2' in popsift.obj
2>popsift_generated_sift_octave.cu.obj : error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MD_DynamicRelease' ne correspond pas à la valeur 'MDd_DynamicDebug' in popsift.obj
2>popsift_generated_s_pyramid_build.cu.obj : error LNK2038: discordance détectée pour '_ITERATOR_DEBUG_LEVEL' : la valeur '0' ne correspond pas à la valeur '2' in popsift.obj
2>popsift_generated_s_pyramid_build.cu.obj : error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MD_DynamicRelease' ne correspond pas à la valeur 'MDd_DynamicDebug' in popsift.obj
2>popsift_generated_s_pyramid_build_aa.cu.obj : error LNK2038: discordance détectée pour '_ITERATOR_DEBUG_LEVEL' : la valeur '0' ne correspond pas à la valeur '2' in popsift.obj
2>popsift_generated_s_pyramid_build_aa.cu.obj : error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MD_DynamicRelease' ne correspond pas à la valeur 'MDd_DynamicDebug' in popsift.obj
2>popsift_generated_s_pyramid_build_ai.cu.obj : error LNK2038: discordance détectée pour '_ITERATOR_DEBUG_LEVEL' : la valeur '0' ne correspond pas à la valeur '2' in popsift.obj
2>popsift_generated_s_pyramid_build_ai.cu.obj : error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MD_DynamicRelease' ne correspond pas à la valeur 'MDd_DynamicDebug' in popsift.obj
2>popsift_generated_s_pyramid_build_ra.cu.obj : error LNK2038: discordance détectée pour '_ITERATOR_DEBUG_LEVEL' : la valeur '0' ne correspond pas à la valeur '2' in popsift.obj
2>popsift_generated_s_pyramid_build_ra.cu.obj : error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MD_DynamicRelease' ne correspond pas à la valeur 'MDd_DynamicDebug' in popsift.obj
2>popsift_generated_s_pyramid_fixed.cu.obj : error LNK2038: discordance détectée pour '_ITERATOR_DEBUG_LEVEL' : la valeur '0' ne correspond pas à la valeur '2' in popsift.obj
2>popsift_generated_s_pyramid_fixed.cu.obj : error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MD_DynamicRelease' ne correspond pas à la valeur 'MDd_DynamicDebug' in popsift.obj
2>popsift_generated_sift_extremum.cu.obj : error LNK2038: discordance détectée pour '_ITERATOR_DEBUG_LEVEL' : la valeur '0' ne correspond pas à la valeur '2' in popsift.obj
2>popsift_generated_sift_extremum.cu.obj : error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MD_DynamicRelease' ne correspond pas à la valeur 'MDd_DynamicDebug' in popsift.obj
2>popsift_generated_s_extrema.cu.obj : error LNK2038: discordance détectée pour '_ITERATOR_DEBUG_LEVEL' : la valeur '0' ne correspond pas à la valeur '2' in popsift.obj
2>popsift_generated_s_extrema.cu.obj : error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MD_DynamicRelease' ne correspond pas à la valeur 'MDd_DynamicDebug' in popsift.obj
2>popsift_generated_s_orientation.cu.obj : error LNK2038: discordance détectée pour '_ITERATOR_DEBUG_LEVEL' : la valeur '0' ne correspond pas à la valeur '2' in popsift.obj
2>popsift_generated_s_orientation.cu.obj : error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MD_DynamicRelease' ne correspond pas à la valeur 'MDd_DynamicDebug' in popsift.obj
2>popsift_generated_s_filtergrid.cu.obj : error LNK2038: discordance détectée pour '_ITERATOR_DEBUG_LEVEL' : la valeur '0' ne correspond pas à la valeur '2' in popsift.obj
2>popsift_generated_s_filtergrid.cu.obj : error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MD_DynamicRelease' ne correspond pas à la valeur 'MDd_DynamicDebug' in popsift.obj
2>popsift_generated_sift_desc.cu.obj : error LNK2038: discordance détectée pour '_ITERATOR_DEBUG_LEVEL' : la valeur '0' ne correspond pas à la valeur '2' in popsift.obj
2>popsift_generated_sift_desc.cu.obj : error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MD_DynamicRelease' ne correspond pas à la valeur 'MDd_DynamicDebug' in popsift.obj
2>popsift_generated_s_desc_loop.cu.obj : error LNK2038: discordance détectée pour '_ITERATOR_DEBUG_LEVEL' : la valeur '0' ne correspond pas à la valeur '2' in popsift.obj
2>popsift_generated_s_desc_loop.cu.obj : error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MD_DynamicRelease' ne correspond pas à la valeur 'MDd_DynamicDebug' in popsift.obj
2>popsift_generated_s_desc_iloop.cu.obj : error LNK2038: discordance détectée pour '_ITERATOR_DEBUG_LEVEL' : la valeur '0' ne correspond pas à la valeur '2' in popsift.obj
2>popsift_generated_s_desc_iloop.cu.obj : error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MD_DynamicRelease' ne correspond pas à la valeur 'MDd_DynamicDebug' in popsift.obj
2>popsift_generated_s_desc_grid.cu.obj : error LNK2038: discordance détectée pour '_ITERATOR_DEBUG_LEVEL' : la valeur '0' ne correspond pas à la valeur '2' in popsift.obj
2>popsift_generated_s_desc_grid.cu.obj : error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MD_DynamicRelease' ne correspond pas à la valeur 'MDd_DynamicDebug' in popsift.obj
2>popsift_generated_s_desc_igrid.cu.obj : error LNK2038: discordance détectée pour '_ITERATOR_DEBUG_LEVEL' : la valeur '0' ne correspond pas à la valeur '2' in popsift.obj
2>popsift_generated_s_desc_igrid.cu.obj : error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MD_DynamicRelease' ne correspond pas à la valeur 'MDd_DynamicDebug' in popsift.obj
2>popsift_generated_s_desc_notile.cu.obj : error LNK2038: discordance détectée pour '_ITERATOR_DEBUG_LEVEL' : la valeur '0' ne correspond pas à la valeur '2' in popsift.obj
2>popsift_generated_s_desc_notile.cu.obj : error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MD_DynamicRelease' ne correspond pas à la valeur 'MDd_DynamicDebug' in popsift.obj
2>popsift_generated_assist.cu.obj : error LNK2038: discordance détectée pour '_ITERATOR_DEBUG_LEVEL' : la valeur '0' ne correspond pas à la valeur '2' in popsift.obj
2>popsift_generated_assist.cu.obj : error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MD_DynamicRelease' ne correspond pas à la valeur 'MDd_DynamicDebug' in popsift.obj
2>popsift_generated_plane_2d.cu.obj : error LNK2038: discordance détectée pour '_ITERATOR_DEBUG_LEVEL' : la valeur '0' ne correspond pas à la valeur '2' in popsift.obj
2>popsift_generated_plane_2d.cu.obj : error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MD_DynamicRelease' ne correspond pas à la valeur 'MDd_DynamicDebug' in popsift.obj
2>popsift_generated_write_plane_2d.cu.obj : error LNK2038: discordance détectée pour '_ITERATOR_DEBUG_LEVEL' : la valeur '0' ne correspond pas à la valeur '2' in popsift.obj
2>popsift_generated_write_plane_2d.cu.obj : error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MD_DynamicRelease' ne correspond pas à la valeur 'MDd_DynamicDebug' in popsift.obj
2>popsift_generated_debug_macros.cu.obj : error LNK2038: discordance détectée pour '_ITERATOR_DEBUG_LEVEL' : la valeur '0' ne correspond pas à la valeur '2' in popsift.obj
2>popsift_generated_debug_macros.cu.obj : error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MD_DynamicRelease' ne correspond pas à la valeur 'MDd_DynamicDebug' in popsift.obj
2>popsift_generated_device_prop.cu.obj : error LNK2038: discordance détectée pour '_ITERATOR_DEBUG_LEVEL' : la valeur '0' ne correspond pas à la valeur '2' in popsift.obj
2>popsift_generated_device_prop.cu.obj : error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MD_DynamicRelease' ne correspond pas à la valeur 'MDd_DynamicDebug' in popsift.obj
2>   Création de la bibliothèque C:/Dev/popsift/build/src/Debug/popsiftd.lib et de l'objet C:/Dev/popsift/build/src/Debug/popsiftd.exp
2>LINK : warning LNK4098: conflit entre la bibliothèque par défaut 'MSVCRT' et les autres bibliothèques ; utilisez /NODEFAULTLIB:library
2>C:\Dev\popsift\build\Windows-AMD64\Debug\popsiftd.dll : fatal error LNK1319: 54 discordances détectées

Desktop

  • OS: Windows 10
  • PopSift version: branch develop (similar behaviour on v1.0.0-rc3)
  • CUDA: 11.3
  • Visual studio: 2019
  • Architecture: x64
  • CMake options: BUILD_SHARED_LIBS = True, Debug mode

How to retrieve matches [question]

Describe the problem
When calling FeaturesDev->match(FeatureDev), how can i retrieve the matches ? Is it by using getReverseMap( ) ? Your sample code show the matches using the match_matrix, but it is delete at the end of the function.

Thank you !

[question]

hi:
In your program, data is exchanged through global variables, such as:
image

Now I have a machine with four GPUs and want to calculate four images at the same time (each image is on a card), so I set it up:
image

and MAX_GPU_GRAD = 4;

image

But when I exchange data between CPU and GPU, I will report an error. Can you help me?

testOxfordDataset.sh fails with "BAD" descriptors, keypoints, and features

I'm hunting for a GPU accelerated version of SIFT that's comparable to existing CPU options. I'm looking at popsift because it's marketed as creating similar features to OpenCV or VLFeat. After building develop, I ran make prepare-test and make run-test. A snippet of the output is included below:

pyramid compare: /volatile/popsift-test2/build/reference/ubc/output-img2/dir-octave/pyramid-o-7-l-4.pgm and pyramid-o-7-l-4.pgm differ
...
DoG compare: /volatile/popsift-test2/build/reference/ubc/output-img2/dir-dog/d-pyramid-o-0-l-0.pgm and d-pyramid-o-0-l-0.pgm differ
...
Keypoints BAD. Descriptors BAD. 
Compare leuven img6 with reference. Features BAD. 
cmp /redacted/build/reference/leuven/output-img6/features.txt /redacted/build/oxford/leuven/output-img6/features.txt

I visually compared two PGM files and verified that they do appear slightly different:
3w5t6h

Environment and build details:

  • CUDA: 10.2
  • Driver: 440.64.00
  • Device: GeForce RTX 2070
  • Config: Release
  • Commit: '3e624d'

Should I expect these tests to pass? Or, are slight variations expected?

[cuda] Support for cuda 11

Cuda 11 has dropped the support for sm_30 and sm_32 architecture.
https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#deprecated-features
Also, it deprecates other older architectures:

Support for Kepler sm_30 and sm_32 architecture based products is dropped.
Support for the following compute capabilities are deprecated in the CUDA Toolkit:

sm_35 (Kepler)

sm_37 (Kepler)

sm_50 (Maxwell)

To reflect this, the script for choosing the CC should be updated as follows:

  set(CUDA_MIN_CC 20)
  set(CUDA_MAX_CC 75)
  if(CUDA_VERSION_MAJOR GREATER_EQUAL 11) #new
    set(CUDA_MIN_CC 35)                   #new 
  elseif(CUDA_VERSION_MAJOR GREATER_EQUAL 10)
    set(CUDA_MIN_CC 30)
  elseif(CUDA_VERSION_MAJOR GREATER_EQUAL 9)
    set(CUDA_MIN_CC 30)
    set(CUDA_MAX_CC 72)

@griwodz Am I correct?

Error when linking to libpopsift.a (__cxa_init_primary_exception. Undefined reference to std::__exception_ptr::exception_ptr::exception_ptr(void).)

is in function SiftJob::~SiftJob() undefined reference to __cxa_init_primary_exception. Undefined reference to std::__exception_ptr::exception_ptr::exception_ptr(void). the second error is in std::promisepopsift::FeaturesBase*::~promise(): undefined reference to __cxa_init_primary_exception and std::__exception_ptr::exception_ptr::exception_ptr(void)**

I am getting these errors when linking to libpopsift. Any solution will be highly appreciated.PROGRAM is written below:

#include <stdio.h>
#include <stdlib.h>
#include <popsift/popsift.h>
#include <popsift/features.h>
#include <popsift/sift_conf.h>
#include <popsift/common/device_prop.h>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/imgcodecs.hpp>

int main()
{
/*popsift::Config config;
config.setOctaves(-1);
config.setLevels(3);
config.setDownsampling(0);
config.setThreshold(0.04);
config.setEdgeLimit(10.0f);
config.setNormalizationMultiplier(0);
config.setNormMode(config.RootSift);
config.setFilterMaxExtrema(-1);
config.setFilterSorting(config.LargestScaleFirst);*/

cv::Mat image1=imread("/home/jetson/Desktop/3.jpg",cv::IMREAD_GRAYSCALE);
int h=image1.rows;
int w=image1.cols;

PopSift sift;
//SiftJob* job = sift.enqueue(w,h,image1.data);

//popsift::Features* popFeatures = job->get();
//std::cout << "Num of features" << popFeatures->getFeatureCount()<< std::endl;
//std::cout << "Num of descriptors" << popFeatures->getDescriptorCount()<< std::endl;


}

New issue: when the second input image size is smaller than the first one, feature extracted numbers are different.

New issue: when the second input image size is smaller than the first one, feature extracted numbers are different.

[First trial]
[Logo Image]:/root/wufangyin/dataset/test/logo2.png
[Logo Size]:[224 x 71]
[Logo Area]:15904
Feature number: 580
[Logo Image]:/root/wufangyin/dataset/test/logo1.png
[Logo Size]:[408 x 96]
[Logo Area]:39168
Feature number: 476

but

[Second trial]
[Logo Image]:/root/wufangyin/dataset/test/logo1.png
[Logo Size]:[408 x 96]
[Logo Area]:39168
Feature number: 476
[Logo Image]:/root/wufangyin/dataset/test/logo2.png
[Logo Size]:[224 x 71]
[Logo Area]:15904
Feature number: 1096

[bug] Compilation error: pack expansion does not make use of any argument packs

Describe the bug
Ambiguous compilation error when compiling on Ubuntu 20.04 with CUDA 10.2.

To Reproduce
Steps to reproduce the behavior:

  1. Clone repository
  2. cd popsift && mkdir build && cd build
  3. cmake ..
  4. make -j8

Cmake output

cmake ..
-- Build type not set, building in Release configuration
-- BUILD_SHARED_LIBS ON
-- CUDA Version is 10.1
-- Setting gencode flags: -gencode;arch=compute_30,code=sm_30;-gencode;arch=compute_35,code=sm_35;-gencode;arch=compute_50,code=sm_50;-gencode;arch=compute_52,code=sm_52;-gencode;arch=compute_60,code=sm_60;-gencode;arch=compute_61,code=sm_61;-gencode;arch=compute_70,code=sm_70;-gencode;arch=compute_75,code=sm_75;-gencode;arch=compute_75,code=compute_75
-- Found DevIL: /usr/lib/x86_64-linux-gnu/libIL.so  
-- DevIL found


******************************************
Building configuration:

-- PopSift version: 1.0.0
-- Build type: Release
-- Build Shared libs: ON
-- Build examples: ON
-- Generate position independent code: ON
-- Use CUDA NVTX for profiling: OFF
-- Synchronize and check CUDA error after every kernel: OFF
-- Grid filtering: ON
-- Testing step: OFF
-- Link with static Boost libraries: OFF
-- Additional warning for CUDA nvcc: OFF
-- Compiling for CUDA CCs: 30;35;50;52;60;61;70;75
-- Install path: /usr/local

******************************************


-- Configuring done
-- Generating done
-- Build files have been written to: /home/khaled/Repositories/popsift/build

Error

make -j8
[  2%] Building NVCC (Device) object src/CMakeFiles/popsift.dir/popsift/common/popsift_generated_device_prop.cu.o
[  8%] Building NVCC (Device) object src/CMakeFiles/popsift.dir/popsift/popsift_generated_gauss_filter.cu.o
[  8%] Building NVCC (Device) object src/CMakeFiles/popsift.dir/popsift/popsift_generated_features.cu.o
[ 11%] Building NVCC (Device) object src/CMakeFiles/popsift.dir/popsift/popsift_generated_sift_pyramid.cu.o
[ 13%] Building NVCC (Device) object src/CMakeFiles/popsift.dir/popsift/popsift_generated_sift_constants.cu.o
[ 16%] Building NVCC (Device) object src/CMakeFiles/popsift.dir/popsift/popsift_generated_sift_conf.cu.o
[ 19%] Building NVCC (Device) object src/CMakeFiles/popsift.dir/popsift/popsift_generated_s_image.cu.o
[ 22%] Building NVCC (Device) object src/CMakeFiles/popsift.dir/popsift/popsift_generated_sift_octave.cu.o
/usr/include/c++/8/utility(307): error: pack expansion does not make use of any argument packs

/usr/include/c++/8/utility(307): error: pack expansion does not make use of any argument packs

/usr/include/c++/8/utility(307): error: pack expansion does not make use of any argument packs

1 error detected in the compilation of "/tmp/tmpxft_0000468b_00000000-13_sift_constants.compute_75.cpp1.ii".
CMake Error at popsift_generated_sift_constants.cu.o.Release.cmake:280 (message):
  Error generating file
  /home/khaled/Repositories/popsift/build/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_sift_constants.cu.o


make[2]: *** [src/CMakeFiles/popsift.dir/build.make:72: src/CMakeFiles/popsift.dir/popsift/popsift_generated_sift_constants.cu.o] Error 1
make[2]: *** Waiting for unfinished jobs....
1 error detected in the compilation of "/tmp/tmpxft_0000469a_00000000-13_sift_conf.compute_75.cpp1.ii".
/usr/include/c++/8/utility(307): error: pack expansion does not make use of any argument packs

/usr/include/c++/8/utility(307): error: pack expansion does not make use of any argument packs

CMake Error at popsift_generated_sift_conf.cu.o.Release.cmake:280 (message):
  Error generating file
  /home/khaled/Repositories/popsift/build/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_sift_conf.cu.o


make[2]: *** [src/CMakeFiles/popsift.dir/build.make:79: src/CMakeFiles/popsift.dir/popsift/popsift_generated_sift_conf.cu.o] Error 1
/usr/include/c++/8/utility(307): error: pack expansion does not make use of any argument packs

1 error detected in the compilation of "/tmp/tmpxft_000046c2_00000000-13_gauss_filter.compute_75.cpp1.ii".
CMake Error at popsift_generated_gauss_filter.cu.o.Release.cmake:280 (message):
  Error generating file
  /home/khaled/Repositories/popsift/build/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_gauss_filter.cu.o


make[2]: *** [src/CMakeFiles/popsift.dir/build.make:86: src/CMakeFiles/popsift.dir/popsift/popsift_generated_gauss_filter.cu.o] Error 1
/usr/include/c++/8/utility(307): error: pack expansion does not make use of any argument packs

1 error detected in the compilation of "/tmp/tmpxft_0000469b_00000000-13_device_prop.compute_75.cpp1.ii".
/usr/include/c++/8/utility(307): error: pack expansion does not make use of any argument packs

1 error detected in the compilation of "/tmp/tmpxft_000046b1_00000000-13_s_image.compute_75.cpp1.ii".
CMake Error at popsift_generated_device_prop.cu.o.Release.cmake:280 (message):
  Error generating file
  /home/khaled/Repositories/popsift/build/src/CMakeFiles/popsift.dir/popsift/common/./popsift_generated_device_prop.cu.o


make[2]: *** [src/CMakeFiles/popsift.dir/build.make:247: src/CMakeFiles/popsift.dir/popsift/common/popsift_generated_device_prop.cu.o] Error 1
CMake Error at popsift_generated_s_image.cu.o.Release.cmake:280 (message):
  Error generating file
  /home/khaled/Repositories/popsift/build/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_s_image.cu.o


make[2]: *** [src/CMakeFiles/popsift.dir/build.make:93: src/CMakeFiles/popsift.dir/popsift/popsift_generated_s_image.cu.o] Error 1
1 error detected in the compilation of "/tmp/tmpxft_000046dd_00000000-13_features.compute_75.cpp1.ii".
CMake Error at popsift_generated_features.cu.o.Release.cmake:280 (message):
  Error generating file
  /home/khaled/Repositories/popsift/build/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_features.cu.o


make[2]: *** [src/CMakeFiles/popsift.dir/build.make:65: src/CMakeFiles/popsift.dir/popsift/popsift_generated_features.cu.o] Error 1
1 error detected in the compilation of "/tmp/tmpxft_000046ca_00000000-13_sift_octave.compute_75.cpp1.ii".
CMake Error at popsift_generated_sift_octave.cu.o.Release.cmake:280 (message):
  Error generating file
  /home/khaled/Repositories/popsift/build/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_sift_octave.cu.o


make[2]: *** [src/CMakeFiles/popsift.dir/build.make:107: src/CMakeFiles/popsift.dir/popsift/popsift_generated_sift_octave.cu.o] Error 1
1 error detected in the compilation of "/tmp/tmpxft_000046d5_00000000-13_sift_pyramid.compute_75.cpp1.ii".
CMake Error at popsift_generated_sift_pyramid.cu.o.Release.cmake:280 (message):
  Error generating file
  /home/khaled/Repositories/popsift/build/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_sift_pyramid.cu.o


make[2]: *** [src/CMakeFiles/popsift.dir/build.make:100: src/CMakeFiles/popsift.dir/popsift/popsift_generated_sift_pyramid.cu.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:143: src/CMakeFiles/popsift.dir/all] Error 2
make: *** [Makefile:130: all] Error 2

Desktop

Popsift commit 7fc809b branch develop

$ uname -a

Linux khaled 5.4.0-29-generic #33-Ubuntu SMP Wed Apr 29 14:32:27 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
$ nvidia-smi

Wed May 13 10:34:38 2020       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.64       Driver Version: 440.64       CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
$ lsb_release -a

No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04 LTS
Release:	20.04
Codename:	focal
$ cmake --version
cmake version 3.16.3
CMake suite maintained and supported by Kitware (kitware.com/cmake).

$ gcc --version
gcc (Ubuntu 7.5.0-6ubuntu2) 7.5.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ g++ --version
g++ (Ubuntu 7.5.0-6ubuntu2) 7.5.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Sun_Jul_28_19:07:16_PDT_2019
Cuda compilation tools, release 10.1, V10.1.243

[question]how to get the xpos and ypos on the input image?

according to get features from job, the xpos and ypos are not on the input image, then xpos and ypos divided by pow(2, config.getUpscaleFactor()), but the xpos and ypos are still not correct on the input image. Beacause matching two images and getting good points and findHomography and warpPerspective don't get the correct transform matrix and image

template image ↓
模板图

image before transform ↓
待变换的图

transform image according to popsift ↓
变换后的图

transform image according to opencv↓
opencv变换后的图

[question] image size limitation?

When running popsift-demo.exe on an 20Mpixels PGM image (5456x3632), I ran into an out of memory error. The code is compiled on window10 with VC++2019, I use CUDA 10.2 and a GeForce RTX 2080 with 8 GB of RAM.
Do you have a limitation on the size of the image ?
Thanks

popsift-demo.exe --print-dev-info  -i 2.pgm
PopSift version: 1.0.0
2.pgm
Choosing device 0: GeForce RTX 2080 with Max-Q Design
Device information:
    Name: GeForce RTX 2080 with Max-Q Design
    Compute Capability:    7.5
    Total device mem:      8589934592 B 8388608 kB 8192 MB
    Per-block shared mem:  49152
    Warp size:             32
    Max threads per block: 1024
    Max threads per SM(X): 1024
    Max block sizes:       {1024,1024,64}
    Max grid sizes:        {2147483647,65535,65535}
    Number of SM(x)s:      46
    Concurrent kernels:    yes
    Mapping host memory:   yes
    Unified addressing:    yes

sift_octave.cu:286
    Could not allocate Intermediate layered array: out of memory

Gauss kernel initialization: unknown error

[17:41:52.100709][info] CUDA-Enabled GPU.
Device information:
	- id:                      0
	- name:                    Quadro K4000
	- compute capability:      3.0
	- total device memory:     3071 MB 
	- device memory available: 1303 MB 
	- per-block shared memory: 49152
	- warp size:               32
	- max threads per block:   1024
	- max threads per SM(X):   2048
	- max block sizes:         {1024,1024,64}
	- max grid sizes:          {2147483647,65535,65535}
	- max 2D array texture:    {65536,65536}
	- max 3D array texture:    {4096,4096,4096}
	- max 2D linear texture:   {65000,65000,1048544}
	- max 2D layered texture:  {16384,16384,2048}
	- number of SM(x)s:        4
	- registers per SM(x):     65536
	- registers per block:     65536
	- concurrent kernels:      yes
	- mapping host memory:     yes
	- unified addressing:      yes
	- texture alignment:       512 byte
	- pitch alignment:         32 byte

[17:41:52.176080][info] Supported CUDA-Enabled GPU detected.
[17:41:53.197578][info] Extracting sift features from view '/xxxx/footage/LionWood/IMG_3678.JPG' [gpu]
Choosing device 0: Quadro K4000
/xxxx/popsift/develop/repo/src/popsift/gauss_filter.cu:245
    cudaMemcpyToSymbol failed for Gauss kernel initialization: unknown error

Does anyone have any idea where this error cames from?

[bug]malloc->delete

Describe the bug
image
use malloc ask for memory of _Imagedata, but use delete to free it?

Could not create texture object

When testing Meshroom with popsift in FeatureExtraction using huge images (12000x9000px)
popsift fails with:

POP_CUDA_FATAL_TEST( err, "Could not create texture object: " );

I assume this is due to the huge image size that my exceeds the limit. If that is the case, a more informative error message would be useful.

minor suggestions for code improvement

Shouldn't this check bi inside of ModeFunctions<Config::OpenCV>::refine function?

if (iter >= MAX_ITERATIONS) {

There is already a comment in place suggesting this:

// Or we quit the loop by exceeding the limit, and reject the point anyway.

Hope I'm not nitpicking here :) Just trying to make code be more readable. I'm also aware this should probably just be PR but I don't really have time to test and verify this claim.

Non aligned free on Windows

Hi!
I have some faults on free of popsift::Features (Windows 64), seems to be freed of ori and ext should be called with aligned_free method.

[question] How can I reach 30fps at 1080p on a RTX 2080

Describe the problem

From the PopSIFT paper, specifically section 7 (conclusion):

"[...] extracts 10000 descriptors from non-upscaled 1080p videos at 100fps or better"

I am trying to reproduce this in my own application. I am using a much more powerful graphics card than the one used in the paper, so I assume I should be able to at least achieve the same results. Specifically, I am using an RTX 2080 while the paper uses an older GTX 1080.

Here are the settings I use to configure PopSIFT:

  • Popsift octaves set to -1, levels = 3, sigma = 1.6 (these are the default settings)
  • Popsift maximum features set to 4096 (this is set using config.setFilterMaxExtrema)
  • Popsift norm mode is set to RootSift (this is set using config.setNormMode(popsift::Config::NormMode::RootSift))
  • Bitmap width = 1920 pixels, height = 1280 pixels

I then initialize a PopSIFT instance using:

PopSift PopSift(config, popsift::Config::ExtractingMode, PopSift::ByteImages);

Then I use enqueue to process 8 images concurrently (i.e. I call enqueue on the first 8 images). Then for each SiftJob, I call get and time how long it takes. This is how I am timing PopSIFT:

auto start = std::chrono::steady_clock::now();
popsift::Features* feature_list = job->get();
auto end = std::chrono::steady_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
std::cout << "popsift took " << duration << " ms to finish" << std::endl;

The first 4 images have already been processed and therefore take 0 milliseconds. The 5th image takes 45 milliseconds, the 6th image takes 332 milliseconds, then every image after that takes ~500 milliseconds to process, which I believe is how long its taking PopSift to process each image on my GPU.

500 milliseconds per image gives me ~2 frames per second, which is quite far off from the paper's 100 frames per second, despite using images of roughly the same size and using more performant hardware.

Am I using PopSIFT incorrectly? Is there a configuration value that I should have set or set incorrectly? Any help in making my usage of PopSIFT faster would be greatly appreciated.

Thank you for your help, and for all your effort on this amazing project!

I've included additional information below that might help. Please let me know if you need anything in particular and I will be glad to assist.

Log


popsift took 0 ms to finish
Processed file [1/28]
  Name:            1_1_2_1_1_-30_-10.png
  Dimensions:      4872 x 3248
  Camera:          #1 - SIMPLE_RADIAL
  Focal Length:    5846.40px
  Features:        2469
bitmap width = 1920, height = 1280
popsift took 0 ms to finish
Processed file [2/28]
  Name:            1_1_2_1_1_-30_-30.png
  Dimensions:      4872 x 3248
  Camera:          #1 - SIMPLE_RADIAL
  Focal Length:    5846.40px
  Features:        1072
bitmap width = 1920, height = 1280
popsift took 0 ms to finish
Processed file [3/28]
  Name:            1_1_2_1_1_-30_-50.png
  Dimensions:      4872 x 3248
  Camera:          #1 - SIMPLE_RADIAL
  Focal Length:    5846.40px
  Features:        709
bitmap width = 1920, height = 1280
popsift took 0 ms to finish
Processed file [4/28]
  Name:            1_1_2_1_1_0_-10.png
  Dimensions:      4872 x 3248
  Camera:          #1 - SIMPLE_RADIAL
  Focal Length:    5846.40px
  Features:        4243
bitmap width = 1920, height = 1280
popsift took 45 ms to finish
Processed file [5/28]
  Name:            1_1_2_1_1_0_-30.png
  Dimensions:      4872 x 3248
  Camera:          #1 - SIMPLE_RADIAL
  Focal Length:    5846.40px
  Features:        1103
bitmap width = 1920, height = 1280
popsift took 332 ms to finish
Processed file [6/28]
  Name:            1_1_2_1_1_0_-50.png
  Dimensions:      4872 x 3248
  Camera:          #1 - SIMPLE_RADIAL
  Focal Length:    5846.40px
  Features:        1983
bitmap width = 1920, height = 1280
popsift took 558 ms to finish
Processed file [7/28]
  Name:            1_1_2_1_1_30_-10.png
  Dimensions:      4872 x 3248
  Camera:          #1 - SIMPLE_RADIAL
  Focal Length:    5846.40px
  Features:        4556
bitmap width = 1920, height = 1280
popsift took 524 ms to finish
Processed file [8/28]
  Name:            1_1_2_1_1_30_-30.png
  Dimensions:      4872 x 3248
  Camera:          #1 - SIMPLE_RADIAL
  Focal Length:    5846.40px
  Features:        2378
bitmap width = 1920, height = 1280
popsift took 510 ms to finish
Processed file [9/28]
  Name:            1_1_2_1_1_30_-50.png
  Dimensions:      4872 x 3248
  Camera:          #1 - SIMPLE_RADIAL
  Focal Length:    5846.40px
  Features:        1582
bitmap width = 1920, height = 1280
popsift took 485 ms to finish
Processed file [10/28]
  Name:            1_1_2_1_1_30_-70.png
  Dimensions:      4872 x 3248
  Camera:          #1 - SIMPLE_RADIAL
  Focal Length:    5846.40px
  Features:        170
bitmap width = 1920, height = 1280
popsift took 529 ms to finish
Processed file [11/28]
  Name:            2_1_2_1_1_-30_-10.png
  Dimensions:      4872 x 3248
  Camera:          #1 - SIMPLE_RADIAL
  Focal Length:    5846.40px
  Features:        2813
bitmap width = 1920, height = 1280
popsift took 503 ms to finish
Processed file [12/28]
  Name:            2_1_2_1_1_-30_-30.png
  Dimensions:      4872 x 3248
  Camera:          #1 - SIMPLE_RADIAL
  Focal Length:    5846.40px
  Features:        1003
bitmap width = 1920, height = 1280
popsift took 499 ms to finish
Processed file [13/28]
  Name:            2_1_2_1_1_-30_-50.png
  Dimensions:      4872 x 3248
  Camera:          #1 - SIMPLE_RADIAL
  Focal Length:    5846.40px
  Features:        843
bitmap width = 1920, height = 1280
popsift took 519 ms to finish
Processed file [14/28]
  Name:            2_1_2_1_1_-30_0.png
  Dimensions:      4872 x 3248
  Camera:          #1 - SIMPLE_RADIAL
  Focal Length:    5846.40px
  Features:        2155
bitmap width = 1920, height = 1280
popsift took 495 ms to finish
Processed file [15/28]
  Name:            2_1_2_1_1_0_-10.png
  Dimensions:      4872 x 3248
  Camera:          #1 - SIMPLE_RADIAL
  Focal Length:    5846.40px
  Features:        588
bitmap width = 1920, height = 1280
popsift took 492 ms to finish
Processed file [16/28]
  Name:            2_1_2_1_1_0_-30.png
  Dimensions:      4872 x 3248
  Camera:          #1 - SIMPLE_RADIAL
  Focal Length:    5846.40px
  Features:        472
bitmap width = 1920, height = 1280
popsift took 497 ms to finish
Processed file [17/28]
  Name:            2_1_2_1_1_0_-50.png
  Dimensions:      4872 x 3248
  Camera:          #1 - SIMPLE_RADIAL
  Focal Length:    5846.40px
  Features:        733


Desktop (please complete the following and other pertinent information):

  • OS:
$ uname -a
Linux khaled 5.4.0-31-generic #35-Ubuntu SMP Thu May 7 20:20:34 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04 LTS
Release:	20.04
Codename:	focal

$ nvidia-smi
Thu May 28 14:07:18 2020       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.64       Driver Version: 440.64       CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce RTX 208...  Off  | 00000000:01:00.0  On |                  N/A |
| 30%   43C    P5    21W / 250W |   1584MiB /  7948MiB |     12%      Default |
+-------------------------------+----------------------+----------------------+

  • PopSift version:
$ git log

commit 7fc809b73ff0313320013465e2f8b1af4f9d63a8 (HEAD -> develop, origin/develop, origin/HEAD)
Merge: b4aee06 f60ef34
Author: Carsten Griwodz <[email protected]>
Date:   Thu May 7 10:54:31 2020 +0200

    Merge pull request #89 from alicevision/dev/sizecheck
    
    test whether image fits into CUDA textures

[ci] move travis to Ubuntu Xenial 16.04

Use Xenial for linux ci testing.

The advantage: we can test against cuda 8, 9, 9.2, 10, 10.2
The downside: we lose the test for 7 and 7.5

Otherwise keeping the current trusty version, we can add 10 and 10.1 (no 9.x)

Ubuntu Bionic 18.04 is also available but only the 10 family is supported (at least for the moment)

What do you think? @fabiencastan @griwodz

[build] debug broken?

It seems that the debug build is broken for cuda >= 8

On cuda 8, a static debug build fails (ubuntu 14 on travis):

-- Generating /home/travis/build/alicevision/popsift/build_debug/src/CMakeFiles/popsift.dir/popsift/common/./popsift_generated_debug_macros.cu.o
/usr/local/cuda/bin/nvcc /home/travis/build/alicevision/popsift/src/popsift/common/debug_macros.cu -dc -o /home/travis/build/alicevision/popsift/build_debug/src/CMakeFiles/popsift.dir/popsift/common/./popsift_generated_debug_macros.cu.o -ccbin /usr/bin/gcc -m64 --std c++11 -Xcompiler ,\"-g\" -Xcompiler -rdynamic -lineinfo --keep --source-in-ptx -Xcompiler -fPIC -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_52,code=sm_52 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_61,code=sm_61 -gencode arch=compute_62,code=sm_62 -gencode arch=compute_62,code=compute_62 --default-stream legacy -G -DNVCC -I/usr/include -I/home/travis/build/alicevision/popsift/build_debug/src/popsift -I/usr/local/cuda/include -I/usr/local/cuda/include
Generated /home/travis/build/alicevision/popsift/build_debug/src/CMakeFiles/popsift.dir/popsift/common/./popsift_generated_debug_macros.cu.o successfully.
ptxas error   : Entry function '_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerIjNS2_3tagENS_11use_defaultESN_EEEElSP_NS_4plusIjEENS_9null_typeESS_SS_SS_SS_EEEEEEEEvT0_' with max regcount of 64 calls function '_ZN6thrust6system4cuda6detail5bulk_6detail11scan_detail16scan_with_bufferILb1ELm512ELm3ENS_6detail15normal_iteratorINS_7pointerIjNS2_3tagENS_11use_defaultESB_EEEESD_jNS_4plusIjEEEEvRNS3_16concurrent_groupINS3_5agentIXT1_EEEXT0_EEET2_SL_T3_T4_T5_RNS5_11scan_bufferIXT0_EXT1_ESL_SM_SO_EE' with regcount of 78
ptxas error   : Entry function '_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerIlNS2_3tagENS_11use_defaultESN_EEEElSP_NS_4plusIlEENS_9null_typeESS_SS_SS_SS_EEEEEEEEvT0_' with max regcount of 64 calls function '_ZN6thrust6system4cuda6detail5bulk_6detail11scan_detail16scan_with_bufferILb1ELm512ELm3ENS_6detail15normal_iteratorINS_7pointerIlNS2_3tagENS_11use_defaultESB_EEEESD_lNS_4plusIlEEEEvRNS3_16concurrent_groupINS3_5agentIXT1_EEEXT0_EEET2_SL_T3_T4_T5_RNS5_11scan_bufferIXT0_EXT1_ESL_SM_SO_EE' with regcount of 80
ptxas error   : Entry function 

On a cuda 10.2 dynamic debug build I get (ubuntu 18.04):

[  2%] Building NVCC intermediate link file src/CMakeFiles/popsift.dir/popsift_intermediate_link.o
cd popsift/cmake-build-debug/src && /usr/local/cuda/bin/nvcc -Xcompiler -rdynamic -lineinfo --keep --source-in-ptx -Xcompiler -fPIC -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_52,code=sm_52 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_61,code=sm_61 -gencode arch=compute_62,code=sm_62 -gencode arch=compute_62,code=compute_62 --default-stream legacy -G -m64 -ccbin /usr/bin/cc -dlink popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_features.cu.o popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_sift_constants.cu.o popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_sift_conf.cu.o popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_gauss_filter.cu.o popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_s_image.cu.o popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_sift_pyramid.cu.o popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_sift_octave.cu.o popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_s_pyramid_build.cu.o popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_s_pyramid_build_aa.cu.o popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_s_pyramid_build_ai.cu.o popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_s_pyramid_build_ra.cu.o popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_s_pyramid_fixed.cu.o popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_sift_extremum.cu.o popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_s_extrema.cu.o popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_s_orientation.cu.o popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_s_filtergrid.cu.o popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_sift_desc.cu.o popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_s_desc_loop.cu.o popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_s_desc_iloop.cu.o popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_s_desc_grid.cu.o popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_s_desc_igrid.cu.o popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_s_desc_notile.cu.o popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/common/./popsift_generated_assist.cu.o popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/common/./popsift_generated_plane_2d.cu.o popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/common/./popsift_generated_write_plane_2d.cu.o popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/common/./popsift_generated_debug_macros.cu.o popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/common/./popsift_generated_device_prop.cu.o -o popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/./popsift_intermediate_link.o
nvcc warning : '--device-debug (-G)' overrides '--generate-line-info (-lineinfo)'
nvlink error   : Undefined reference to 'cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags' in 'popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_s_filtergrid.cu.o' (target: sm_62)
nvlink error   : Undefined reference to 'cudaPeekAtLastError' in 'popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_s_filtergrid.cu.o' (target: sm_62)
nvlink error   : Undefined reference to 'cudaGetParameterBuffer' in 'popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_s_filtergrid.cu.o' (target: sm_62)
nvlink error   : Undefined reference to 'cudaDeviceSynchronize' in 'popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_s_filtergrid.cu.o' (target: sm_62)
nvlink error   : Undefined reference to 'cudaLaunchDevice' in 'popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_s_filtergrid.cu.o' (target: sm_62)
nvlink error   : Undefined reference to 'cudaGetErrorString' in 'popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_s_filtergrid.cu.o' (target: sm_62)
nvlink error   : Undefined reference to 'cudaGetLastError' in 'popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_s_filtergrid.cu.o' (target: sm_62)
nvlink error   : Undefined reference to 'cudaGetDevice' in 'popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_s_filtergrid.cu.o' (target: sm_62)
nvlink error   : Undefined reference to 'cudaDeviceGetAttribute' in 'popsift/cmake-build-debug/src/CMakeFiles/popsift.dir/popsift/./popsift_generated_s_filtergrid.cu.o' (target: sm_62)
src/CMakeFiles/popsift.dir/build.make:8453: recipe for target 'src/CMakeFiles/popsift.dir/popsift_intermediate_link.o' failed

For the lattert seems like a linking missing but the only difference between release and debug command line is just the -G and -O3. And the calls to those functions are generated in both build types.

Any clue? @griwodz

[question] Is the function cudaHostRegister() in FeaturesHost::pin() an indispensable operation?

I tried to use popsift on nvidia Jetson TX2 which is arm64 architecture. But the function cudaHostRegister() is not available on arm64 platform.
I consulted the CUDA TOOLKIT DOCUMENTATION and found that it said

"Since the memory can be accessed directly by the device, it can be read or written with much higher bandwidth than pageable memory that has not been registered."

So is it right that the program might be slower without this operation, but will still work correctly? Or is there any other methods could be used instead of the cudaHostRegister?
Thanks a lot!

Better handle the release of resources

So far the release of the resources taken by the class PopSift relies on an explicit call to the uninit() method (mostly for the Pipe object contained within).
This is helpful when the object instantiated from PopSift has a broad scope and resources need to be freed explicitly without waiting for the object to go out of scope.
On the other hand, it would be nice that the object is able to automatically release the resources when it goes out of scope, i.e. the destructor is called. (Single responsibility principle)

One possibility is then to have a boolean attribute in the class, _isInit, that keeps track of the status of the object so that in the destructor the uninit method can be called if the object is still initialized.

[question]how can I set config to extract the same features for same images?

deviceInfo.set( 0, false );
sift_config.setThreshold(0.04);
sift_config.setEdgeLimit(10);
sift_config.setNormMode(popsift::Config::Classic);
sift_config.setFilterSorting(popsift::Config::SmallestScaleFirst);//RandomScale
sift_config.setGaussMode(popsift::Config::OpenCV_Compute);
sift_config.setMode(popsift::Config::OpenCV);
sift_config.setDownsampling(0);
sift_config.setOctaves(4);
sift_config.setLevels(3);
sift_config.setSigma(1.6);

This is my config, I used popsift to calculate the sift features,and used opencv to do the next steps, include knnmatch, findHomography and warpPerspective, but the result is different every times. How can I reduce the error?

is this implementation thread-safe?

I'm trying to execute get method of multiple SiftJob object pointers in parallel (with openmp). The following error occurs:

/home/ubuntu/dev/popsift/src/popsift/features.cu:97 Runtime warning:
    Failed to register descriptor memory in CUDA.
    Descriptors count: 0
    Memory size requested: 0
    invalid argument
/home/ubuntu/dev/popsift/src/popsift/sift_pyramid.cu:313
    Size in memcpy async is null.
/home/ubuntu/dev/popsift/src/popsift/sift_desc.cu:83
    cudaEventRecord failed: driver shutting down
terminate called recursively

So I wonder what's the right way to use popsift in multi-thread mode.

gauss-mode=relative fails with CUDA CC 3.5

Runtime failure on MacBook Pro from 2013; Confirmed on a Linux machine with GTX 710.
Strange; "relative" mode uses textures to save a multiplication in Gauss filtering. Texture use is no problem elsewhere in the code.

run image crash [bug]

Describe the bug
When I run popsift for one image crash,The default parameters are used
my email: [email protected]
popsift_test_crash1

To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Log
If applicable, copy paste the relevant log output (please embed the text in a markdown code tag "```" )

Desktop (please complete the following and other pertinent information):

  • OS: [e.g. win 10, osx, ]
  • PopSift version: please specify if you are using a release version or your own build
    • Binary version (if applicable) [e.g. 2019.1]
    • Commit reference (if applicable) [e.g. 08ddbe2]

Additional context
Add any other context about the problem here.

[request] Make public API headers CUDA-free

Is your feature request related to a problem? Please describe.

I want to use PopSift in a downstream project. The project does not depend CUDA directly and I would like to be able to build it without nvcc. However, when I include "popsift/features.h", it transitively includes "popsift/sift_constants.h", which, in turn, has __device__ variables declared. This means that compilation with a "normal" compiler fails.

Describe the solution you'd like

I'd like public API headers of PopSift to be CUDA-free.

Describe alternatives you've considered

As a temporary workaround, I manually removed the lines containing __device__ from the installed header file. A proper solution would probably involve splitting the file into host/device code, or rethinking whether it needs to be included at all into "popsift/features.h".

How to get the coordinate of feature points of popsift::FeaturesDev?

I want to get the coordinate of feature points after match. So I add cout << lFeatures->getFeatures()[0].xpos << endl; to src/application/match.cpp. Then the program broke. It shows Segmentation fault (core dumped).
But I did the same thing to src/application/main.cpp, added cout << feature_list->_ext[0].xpos << endl; to void read_job( SiftJob* job, bool really_write ), it worked well.
I noticed that the class of lFeatures is popsift::FeaturesDev, and the feature_list's is popsift::Features. So why I cannot get the infomation of feature from popsift::FeaturesDev? What should I do? THANKS!

[cmake] switch to modern cmake

  • proper include and link with visibility (PRIVATE, PUBLIC etc)
  • create a PopSiftConfig.cmake to make it reusable into cmake projects
  • clean cmakelists
  • doc

Missing timing info

I running the following command to extract sift features,
popsift-demo -i oht_cfrp_00.tiff --print-time-info
but the program only return this without time info.

oht_cfrp_00.tiff
Loading 400 x 1040 image oht_cfrp_00.tiff
Number of feature points: 9145 number of feature descriptors: 11711

I recently thought of using the inbuilt match function of popsift, but getting segmentation error in that step[bug]

Describe the bug
Segmentation error in step lFeatures->match(rFeatures);

To Reproduce
I am using nsight eclipse, i linked the libpopsift library with my application and it compiled successfully. My mode was changed to Matching mode as per the norm:
But the program crashes with segmentation fault on the matching step. Wonder why that is? Any leads will be appreciated.

Desktop (please complete the following and other pertinent information):

  • OS: [e.g. Cross compiled method, host x86_64, target: jetson tx2 ]
  • PopSift version: Master repository from this link

Is popsift platform independent.

I wish to use popsift on the Nvidia tx2 dev kit. I am aware that popsift creates a libpopsift which can be linked to a application and used by called third party API's. However there is no information on using arm on say a popsift on a platform like the tx2(arm64). Is the popsift meant only for the traditional i386 architecture?

The second part of the question, is that if I have to use popsift on a arm board, I can do a cross compile on the entire popsift during installation but I don't know if this step works.
I am trying this method to see if it works. Also I need to know if I can directly work it out on the jetson instead of having a host and cross compiling?

I may have complicated it, but I am ready to answer any queries that can help in better understanding the nature of my problem.

boost: mutex lock failed in pthread_mutex_lock: Invalid argument error

I wish to run popsift on a Nvidia tx2, The first method i thought of was:

  1. Cross compilation method:

Here i am tried creating the libpopsift.a file using cmake and a tool chain file. The libposift was generated successfully, but not the popsift-demo executable.
My host is a traditional ubuntu system (18.04). I wonder why that happened.
I linked my application code with the relevant libpopsift(compiled with the above method ) and made a binary that I eventually ran on the jetson.
But in the jetson, my application responds with a error:

terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::lock_error> >'
  what():  boost: mutex lock failed in pthread_mutex_lock: Invalid argument

Any idea what this error indicates??

add support to RTX 20 series

Thank you for releasing this amazing project!

I've noticed that the code works with CUDA10 & GTX 1080Ti properly, whereas RTX 20 series seems to be incompatible.

Specifically, I tried RTX 2080 with CUDA9 and CUDA10 in the docker container, the program will get stuck at function "ori_par" (L.400 in s_orientation.cu) after calling cudaDeviceSynchronize() (L.427 in s_orientation.cu).

I have also tried to modify the CMakeLists.txt to add sm_75 support but the issue still exits.

Would to take a look to see if it can be resolved cheaply?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.