mirror of
https://github.com/introlab/rtabmap.git
synced 2026-10-07 02:27:47 +08:00
GlobalDescriptor (PyDescriptor / netvlad) (#1163)
* First commit for pydescriptor * Fixed Python refactoring errors * GUI: added PyDescriptor parameters * reordered python3 includes * updated rtabmap_netvlad.py test main * fixed build from last merge * integrated https://github.com/introlab/rtabmap/pull/1255 * rescaled dot product result Closing https://github.com/introlab/rtabmap/issues/1105
This commit is contained in:
+29
-1
@@ -40,6 +40,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#include <rtabmap/core/EpipolarGeometry.h>
|
||||
#include "rtabmap/core/VisualWord.h"
|
||||
#include "rtabmap/core/Features2d.h"
|
||||
#include "rtabmap/core/GlobalDescriptorExtractor.h"
|
||||
#include "rtabmap/core/RegistrationIcp.h"
|
||||
#include "rtabmap/core/Registration.h"
|
||||
#include "rtabmap/core/RegistrationVis.h"
|
||||
@@ -132,6 +133,7 @@ Memory::Memory(const ParametersMap & parameters) :
|
||||
_feature2D = Feature2D::create(parameters);
|
||||
_vwd = new VWDictionary(parameters);
|
||||
_registrationPipeline = Registration::create(parameters);
|
||||
_globalDescriptorExtractor = GlobalDescriptorExtractor::create(parameters);
|
||||
if(!_registrationPipeline->isImageRequired())
|
||||
{
|
||||
// make sure feature matching is used instead of optical flow to compute the guess
|
||||
@@ -761,6 +763,22 @@ void Memory::parseParameters(const ParametersMap & parameters)
|
||||
_markerDetector->parseParameters(params);
|
||||
}
|
||||
|
||||
int globalDescriptorStrategy = -1;
|
||||
Parameters::parse(params, Parameters::kMemGlobalDescriptorStrategy(), globalDescriptorStrategy);
|
||||
if(globalDescriptorStrategy != -1 &&
|
||||
(_globalDescriptorExtractor==0 || (int)_globalDescriptorExtractor->getType() != globalDescriptorStrategy))
|
||||
{
|
||||
if(_globalDescriptorExtractor)
|
||||
{
|
||||
delete _globalDescriptorExtractor;
|
||||
}
|
||||
_globalDescriptorExtractor = GlobalDescriptorExtractor::create(parameters_);
|
||||
}
|
||||
else if(_globalDescriptorExtractor)
|
||||
{
|
||||
_globalDescriptorExtractor->parseParameters(params);
|
||||
}
|
||||
|
||||
// do this after all params are parsed
|
||||
// SLAM mode vs Localization mode
|
||||
iter = params.find(Parameters::kMemIncrementalMemory());
|
||||
@@ -5934,7 +5952,17 @@ Signature * Memory::createSignature(const SensorData & inputData, const Transfor
|
||||
s->sensorData().setGroundTruth(data.groundTruth());
|
||||
s->sensorData().setGPS(data.gps());
|
||||
s->sensorData().setEnvSensors(data.envSensors());
|
||||
s->sensorData().setGlobalDescriptors(data.globalDescriptors());
|
||||
|
||||
std::vector<GlobalDescriptor> globalDescriptors = data.globalDescriptors();
|
||||
if(_globalDescriptorExtractor)
|
||||
{
|
||||
GlobalDescriptor gdescriptor = _globalDescriptorExtractor->extract(inputData);
|
||||
if(!gdescriptor.data().empty())
|
||||
{
|
||||
globalDescriptors.push_back(gdescriptor);
|
||||
}
|
||||
}
|
||||
s->sensorData().setGlobalDescriptors(globalDescriptors);
|
||||
|
||||
t = timer.ticks();
|
||||
if(stats) stats->addStatistic(Statistics::kTimingMemCompressing_data(), t*1000.0f);
|
||||
|
||||
Reference in New Issue
Block a user