Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[bug] fix popsift static release #807

Merged
merged 8 commits into from
Jun 16, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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