Skip to content

Commit

Permalink
Merge pull request #807 from alicevision/fix/popsiftExtractor
Browse files Browse the repository at this point in the history
[bug] fix popsift static release
  • Loading branch information
fabiencastan authored Jun 16, 2020
2 parents eb5e2cd + 0e10bd6 commit e2e196b
Show file tree
Hide file tree
Showing 11 changed files with 57 additions and 27 deletions.
4 changes: 2 additions & 2 deletions src/aliceVision/feature/ImageDescriber.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,9 @@ std::istream& operator>>(std::istream& in, EImageDescriberPreset& p);
class ImageDescriber
{
public:
ImageDescriber() {}
ImageDescriber() = default;

virtual ~ImageDescriber() {}
virtual ~ImageDescriber() = default;

/**
* @brief Check if the image describer use CUDA
Expand Down
4 changes: 3 additions & 1 deletion src/aliceVision/feature/akaze/ImageDescriber_AKAZE.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ struct AKAZEParams
class ImageDescriber_AKAZE : public ImageDescriber
{
public:
ImageDescriber_AKAZE(const AKAZEParams& params = AKAZEParams(), bool isOriented = true)
explicit ImageDescriber_AKAZE(const AKAZEParams& params = AKAZEParams(), bool isOriented = true)
: ImageDescriber()
, _params(params)
, _isOriented(isOriented)
Expand Down Expand Up @@ -176,6 +176,8 @@ class ImageDescriber_AKAZE : public ImageDescriber
}
}

~ImageDescriber_AKAZE() override = default;

private:
AKAZEParams _params;
bool _isOriented = true;
Expand Down
7 changes: 0 additions & 7 deletions src/aliceVision/feature/cctag/ImageDescriber_CCTAG.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,6 @@ ImageDescriber_CCTAG::CCTagParameters::CCTagParameters(size_t nRings)
#endif
}

ImageDescriber_CCTAG::CCTagParameters::~CCTagParameters()
{
}

bool ImageDescriber_CCTAG::CCTagParameters::setPreset(EImageDescriberPreset preset)
{
switch(preset)
Expand Down Expand Up @@ -60,9 +56,6 @@ ImageDescriber_CCTAG::ImageDescriber_CCTAG(const std::size_t nRings)
, _params(nRings)
{}

ImageDescriber_CCTAG::~ImageDescriber_CCTAG()
{
}

bool ImageDescriber_CCTAG::useCuda() const
{
Expand Down
10 changes: 6 additions & 4 deletions src/aliceVision/feature/cctag/ImageDescriber_CCTAG.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,9 @@ namespace feature {
class ImageDescriber_CCTAG : public ImageDescriber
{
public:
ImageDescriber_CCTAG(const std::size_t nRings = 3);
~ImageDescriber_CCTAG();
explicit ImageDescriber_CCTAG(const std::size_t nRings = 3);

~ImageDescriber_CCTAG() override = default;

/**
* @brief Check if the image describer use CUDA
Expand Down Expand Up @@ -106,8 +107,9 @@ class ImageDescriber_CCTAG : public ImageDescriber

struct CCTagParameters
{
CCTagParameters(size_t nRings);
~CCTagParameters();
explicit CCTagParameters(size_t nRings);

~CCTagParameters() = default;

bool setPreset(EImageDescriberPreset preset);

Expand Down
4 changes: 4 additions & 0 deletions src/aliceVision/feature/openCV/ImageDescriber_AKAZE_OCV.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ class ImageDescriber_AKAZE_OCV : public ImageDescriber
{
public:

ImageDescriber_AKAZE_OCV() = default;

/**
* @brief Check if the image describer use CUDA
* @return True if the image describer use CUDA
Expand Down Expand Up @@ -103,6 +105,8 @@ class ImageDescriber_AKAZE_OCV : public ImageDescriber
regions.reset( new AKAZE_Float_Regions );
}

~ImageDescriber_AKAZE_OCV() override = default;

};

} //namespace feature
Expand Down
4 changes: 3 additions & 1 deletion src/aliceVision/feature/sift/ImageDescriber_SIFT.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ namespace feature {
class ImageDescriber_SIFT : public ImageDescriber
{
public:
ImageDescriber_SIFT(const SiftParams& params = SiftParams(), bool isOriented = true)
explicit ImageDescriber_SIFT(const SiftParams& params = SiftParams(), bool isOriented = true)
: _params(params)
, _isOriented(isOriented)
{
Expand Down Expand Up @@ -166,6 +166,8 @@ class ImageDescriber_SIFT : public ImageDescriber
_imageDescriberImpl->allocate(regions);
}

~ImageDescriber_SIFT() override = default;

private:
SiftParams _params;
std::unique_ptr<ImageDescriber> _imageDescriberImpl = nullptr;
Expand Down
23 changes: 22 additions & 1 deletion src/aliceVision/feature/sift/ImageDescriber_SIFT_popSIFT.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,13 @@
#include <popsift/sift_octave.h>
#include <popsift/common/device_prop.h>

#include <atomic>

namespace aliceVision {
namespace feature {

std::unique_ptr<PopSift> ImageDescriber_SIFT_popSIFT::_popSift = nullptr;
std::atomic<int> ImageDescriber_SIFT_popSIFT::_instanceCounter{0};

void ImageDescriber_SIFT_popSIFT::setConfigurationPreset(EImageDescriberPreset preset)
{
Expand Down Expand Up @@ -78,7 +81,7 @@ void ImageDescriber_SIFT_popSIFT::resetConfiguration()
cudaDeviceReset();

popsift::cuda::device_prop_t deviceInfo;
deviceInfo.set(0, true); // use only the first device & print informations
deviceInfo.set(0, true); // use only the first device & print information

// reset configuration
popsift::Config config;
Expand All @@ -95,5 +98,23 @@ void ImageDescriber_SIFT_popSIFT::resetConfiguration()
_popSift.reset(new PopSift(config, popsift::Config::ExtractingMode, PopSift::FloatImages));
}

ImageDescriber_SIFT_popSIFT::ImageDescriber_SIFT_popSIFT(const SiftParams& params, bool isOriented)
: ImageDescriber()
, _params(params)
, _isOriented(isOriented)
{
_instanceCounter++;
}

ImageDescriber_SIFT_popSIFT::~ImageDescriber_SIFT_popSIFT()
{
_instanceCounter--;

if(_instanceCounter.load() == 0)
{
_popSift.reset(nullptr);
}
}

} // namespace feature
} // namespace aliceVision
14 changes: 8 additions & 6 deletions src/aliceVision/feature/sift/ImageDescriber_SIFT_popSIFT.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,7 @@ namespace feature {
class ImageDescriber_SIFT_popSIFT : public ImageDescriber
{
public:
ImageDescriber_SIFT_popSIFT(const SiftParams& params = SiftParams(), bool isOriented = true)
: ImageDescriber()
, _params(params)
, _isOriented(isOriented)
{}
explicit ImageDescriber_SIFT_popSIFT(const SiftParams& params = SiftParams(), bool isOriented = true);

/**
* @brief Check if the image describer use CUDA
Expand Down Expand Up @@ -98,7 +94,7 @@ class ImageDescriber_SIFT_popSIFT : public ImageDescriber
*/
bool describe(const image::Image<float>& image,
std::unique_ptr<Regions>& regions,
const image::Image<unsigned char>* mask = NULL) override;
const image::Image<unsigned char>* mask = nullptr) override;

/**
* @brief Allocate Regions type depending of the ImageDescriber
Expand All @@ -109,13 +105,19 @@ class ImageDescriber_SIFT_popSIFT : public ImageDescriber
regions.reset(new SIFT_Regions);
}

/**
* @brief Destructor
*/
~ImageDescriber_SIFT_popSIFT() override;

private:

void resetConfiguration();

SiftParams _params;
bool _isOriented = true;
static std::unique_ptr<PopSift> _popSift;
static std::atomic<int> _instanceCounter;
};

} // namespace feature
Expand Down
4 changes: 2 additions & 2 deletions src/aliceVision/feature/sift/ImageDescriber_SIFT_vlfeat.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ namespace feature {
class ImageDescriber_SIFT_vlfeat : public ImageDescriber
{
public:
ImageDescriber_SIFT_vlfeat(const SiftParams& params = SiftParams(), bool isOriented = true)
explicit ImageDescriber_SIFT_vlfeat(const SiftParams& params = SiftParams(), bool isOriented = true)
: ImageDescriber()
, _params(params)
, _isOriented(isOriented)
Expand All @@ -37,7 +37,7 @@ class ImageDescriber_SIFT_vlfeat : public ImageDescriber
VLFeatInstance::initialize();
}

~ImageDescriber_SIFT_vlfeat()
~ImageDescriber_SIFT_vlfeat() override
{
VLFeatInstance::destroy();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ namespace feature {
class ImageDescriber_SIFT_vlfeatFloat : public ImageDescriber
{
public:
ImageDescriber_SIFT_vlfeatFloat(const SiftParams& params = SiftParams(), bool isOriented = true)
explicit ImageDescriber_SIFT_vlfeatFloat(const SiftParams& params = SiftParams(), bool isOriented = true)
: ImageDescriber()
, _params(params)
, _isOriented(isOriented)
Expand All @@ -37,7 +37,7 @@ class ImageDescriber_SIFT_vlfeatFloat : public ImageDescriber
VLFeatInstance::initialize();
}

~ImageDescriber_SIFT_vlfeatFloat()
~ImageDescriber_SIFT_vlfeatFloat() override
{
VLFeatInstance::destroy();
}
Expand Down
6 changes: 5 additions & 1 deletion src/software/pipeline/main_featureExtraction.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ class FeatureExtractor
, outputBasename(fs::path(fs::path(outputFolder) / fs::path(std::to_string(view.getViewId()))).string())
{}

~ViewJob() = default;

bool useGPU() const
{
return !gpuImageDescriberIndexes.empty();
Expand Down Expand Up @@ -204,6 +206,8 @@ class FeatureExtractor
}
}

~FeatureExtractor() = default;

private:

void computeViewJob(const ViewJob& job, bool useGPU = false)
Expand All @@ -215,7 +219,7 @@ class FeatureExtractor

const auto imageDescriberIndexes = useGPU ? job.gpuImageDescriberIndexes : job.cpuImageDescriberIndexes;

for(auto& imageDescriberIndex : imageDescriberIndexes)
for(const auto & imageDescriberIndex : imageDescriberIndexes)
{
const auto& imageDescriber = _imageDescribers.at(imageDescriberIndex);
const feature::EImageDescriberType imageDescriberType = imageDescriber->getDescriberType();
Expand Down

0 comments on commit e2e196b

Please sign in to comment.