diff --git a/Modules/Learning/Sampling/include/otbSampleAugmentation.h b/Modules/Learning/Sampling/include/otbSampleAugmentation.h index bddfef9c3e12d71bf80915ad191a2189a0e00535..84e67ffdd413940e2646ff2f35d6423241ab5f3f 100644 --- a/Modules/Learning/Sampling/include/otbSampleAugmentation.h +++ b/Modules/Learning/Sampling/include/otbSampleAugmentation.h @@ -40,7 +40,7 @@ using SampleVectorType = std::vector<SampleType>; Estimate standard deviations of the components in one pass using Welford's algorithm */ -SampleType estimateStds(const SampleVectorType& samples) +SampleType EstimateStds(const SampleVectorType& samples) { const auto nbSamples = samples.size(); const auto nbComponents = samples[0].size(); @@ -71,7 +71,7 @@ SampleType estimateStds(const SampleVectorType& samples) * the input samples and add them to the new data set until nbSamples * are added. The elements of newSamples are removed before proceeding. */ -void replicateSamples(const SampleVectorType& inSamples, +void ReplicateSamples(const SampleVectorType& inSamples, const size_t nbSamples, SampleVectorType& newSamples) { @@ -92,7 +92,7 @@ void replicateSamples(const SampleVectorType& inSamples, * input variables divided by stdFactor (defaults to 10). The * elements of newSamples are removed before proceeding. */ -void jitterSamples(const SampleVectorType& inSamples, +void JitterSamples(const SampleVectorType& inSamples, const size_t nbSamples, SampleVectorType& newSamples, float stdFactor=10, @@ -106,7 +106,7 @@ void jitterSamples(const SampleVectorType& inSamples, std::srand(seed); // We use one gaussian distribution per component since they may // have different stds - auto stds = estimateStds(inSamples); + auto stds = EstimateStds(inSamples); std::vector<std::normal_distribution<double>> gaussDis(nbComponents); #pragma omp parallel for for(size_t i=0; i<nbComponents; ++i) @@ -136,7 +136,7 @@ struct NeighborSorter } }; -double computeSquareDistance(const SampleType& x, const SampleType& y) +double ComputeSquareDistance(const SampleType& x, const SampleType& y) { assert(x.size()==y.size()); double dist{0}; @@ -151,7 +151,7 @@ using NNIndicesType = std::vector<NeighborType>; using NNVectorType = std::vector<NNIndicesType>; /** Returns the indices of the nearest neighbors for each input sample */ -void findKNNIndices(const SampleVectorType& inSamples, +void FindKNNIndices(const SampleVectorType& inSamples, const size_t nbNeighbors, NNVectorType& nnVector) { @@ -164,7 +164,7 @@ void findKNNIndices(const SampleVectorType& inSamples, for(size_t neighborIdx=0; neighborIdx<nbSamples; ++neighborIdx) { if(sampleIdx!=neighborIdx) - nns.push_back({neighborIdx, computeSquareDistance(inSamples[sampleIdx], + nns.push_back({neighborIdx, ComputeSquareDistance(inSamples[sampleIdx], inSamples[neighborIdx])}); } std::partial_sort(nns.begin(), nns.begin()+nbNeighbors, nns.end(), NeighborSorter{}); @@ -175,7 +175,7 @@ void findKNNIndices(const SampleVectorType& inSamples, /** Generate the new sample in the line linking s1 and s2 */ -SampleType smoteCombine(const SampleType& s1, const SampleType& s2, double position) +SampleType SmoteCombine(const SampleType& s1, const SampleType& s2, double position) { auto result = s1; for(size_t i=0; i<s1.size(); ++i) @@ -189,7 +189,7 @@ synthetic minority over-sampling technique, Journal of artificial intelligence research, 16(), 321–357 (2002). http://dx.doi.org/10.1613/jair.953 */ -void smote(const SampleVectorType& inSamples, +void Smote(const SampleVectorType& inSamples, const size_t nbSamples, SampleVectorType& newSamples, const int nbNeighbors, @@ -197,7 +197,7 @@ void smote(const SampleVectorType& inSamples, { newSamples.resize(nbSamples); NNVectorType nnVector; - findKNNIndices(inSamples, nbNeighbors, nnVector); + FindKNNIndices(inSamples, nbNeighbors, nnVector); // The input samples are selected randomly with replacement std::srand(seed); #pragma omp parallel for @@ -207,7 +207,7 @@ void smote(const SampleVectorType& inSamples, const auto sample = inSamples[sampleIdx]; const auto neighborIdx = nnVector[sampleIdx][std::rand()%nbNeighbors].index; const auto neighbor = inSamples[neighborIdx]; - newSamples[i] = smoteCombine(sample, neighbor, std::rand()/double{RAND_MAX}); + newSamples[i] = SmoteCombine(sample, neighbor, std::rand()/double{RAND_MAX}); } } diff --git a/Modules/Learning/Sampling/include/otbSampleAugmentationFilter.h b/Modules/Learning/Sampling/include/otbSampleAugmentationFilter.h index 09467dfd2623eceb07d7ef829887d859bbf989cf..e06f03b0ab894e80c70c410672f68956182cd1ee 100644 --- a/Modules/Learning/Sampling/include/otbSampleAugmentationFilter.h +++ b/Modules/Learning/Sampling/include/otbSampleAugmentationFilter.h @@ -124,24 +124,24 @@ protected: using Superclass::MakeOutput; - SampleVectorType extractSamples(const ogr::DataSource::Pointer vectors, + SampleVectorType ExtractSamples(const ogr::DataSource::Pointer vectors, size_t layerName, const std::string& classField, const int label, const std::vector<std::string>& excludedFields = {}); - void sampleToOGRFeatures(const ogr::DataSource::Pointer& vectors, + void SampleToOGRFeatures(const ogr::DataSource::Pointer& vectors, ogr::DataSource* output, const SampleVectorType& samples, const size_t layerName, const std::string& classField, int label, const std::vector<std::string>& excludedFields = {}); - std::set<size_t> getExcludedFieldsIds(const std::vector<std::string>& excludedFields, + std::set<size_t> GetExcludedFieldsIds(const std::vector<std::string>& excludedFields, const ogr::Layer& inputLayer); -bool isNumericField(const ogr::Feature& feature, const int idx); + bool IsNumericField(const ogr::Feature& feature, const int idx); -ogr::Feature selectTemplateFeature(const ogr::Layer& inputLayer, - const std::string& classField, int label); + ogr::Feature SelectTemplateFeature(const ogr::Layer& inputLayer, + const std::string& classField, int label); private: SampleAugmentationFilter(const Self &); //purposely not implemented void operator =(const Self&); //purposely not implemented diff --git a/Modules/Learning/Sampling/include/otbSampleAugmentationFilter.txx b/Modules/Learning/Sampling/include/otbSampleAugmentationFilter.txx index 75895891ae489afbb84070cf897d88b565d37ea7..8976c1c55b82bbd4663d0ea00df49ddd4aedc4f2 100644 --- a/Modules/Learning/Sampling/include/otbSampleAugmentationFilter.txx +++ b/Modules/Learning/Sampling/include/otbSampleAugmentationFilter.txx @@ -84,7 +84,7 @@ SampleAugmentationFilter OGRDataSourcePointerType inputDS = dynamic_cast<OGRDataSourceType*>(this->itk::ProcessObject::GetInput(0)); auto outputDS = static_cast<ogr::DataSource *>(this->itk::ProcessObject::GetOutput(0)); - auto inSamples = this->extractSamples(inputDS, m_Layer, + auto inSamples = this->ExtractSamples(inputDS, m_Layer, m_ClassFieldName, m_Label, m_ExcludedFields); @@ -93,13 +93,13 @@ SampleAugmentationFilter { case Strategy::Replicate: { - sampleAugmentation::replicateSamples(inSamples, m_NumberOfSamples, + sampleAugmentation::ReplicateSamples(inSamples, m_NumberOfSamples, newSamples); } break; case Strategy::Jitter: { - sampleAugmentation::jitterSamples(inSamples, m_NumberOfSamples, + sampleAugmentation::JitterSamples(inSamples, m_NumberOfSamples, newSamples, m_StdFactor, m_Seed); @@ -107,14 +107,14 @@ SampleAugmentationFilter break; case Strategy::Smote: { - sampleAugmentation::smote(inSamples, m_NumberOfSamples, + sampleAugmentation::Smote(inSamples, m_NumberOfSamples, newSamples, m_SmoteNeighbors, m_Seed); } break; } - this->sampleToOGRFeatures(inputDS, outputDS, newSamples, m_Layer, + this->SampleToOGRFeatures(inputDS, outputDS, newSamples, m_Layer, m_ClassFieldName, m_Label, m_ExcludedFields); @@ -128,7 +128,7 @@ SampleAugmentationFilter */ SampleAugmentationFilter::SampleVectorType SampleAugmentationFilter -::extractSamples(const ogr::DataSource::Pointer vectors, +::ExtractSamples(const ogr::DataSource::Pointer vectors, size_t layerName, const std::string& classField, const int label, const std::vector<std::string>& excludedFields) @@ -147,7 +147,7 @@ SampleAugmentationFilter } auto numberOfFields = (*featureIt).ogr().GetFieldCount(); - auto excludedIds = this->getExcludedFieldsIds(excludedFields, layer); + auto excludedIds = this->GetExcludedFieldsIds(excludedFields, layer); SampleVectorType samples; int sampleCount{0}; while( featureIt!=layer.end() ) @@ -160,7 +160,7 @@ SampleAugmentationFilter for(auto idx=0; idx<numberOfFields; ++idx) { if(excludedIds.find(idx) == excludedIds.cend() && - this->isNumericField((*featureIt), idx)) + this->IsNumericField((*featureIt), idx)) mv.push_back((*featureIt).ogr().GetFieldAsDouble(idx)); } samples.push_back(mv); @@ -178,7 +178,7 @@ SampleAugmentationFilter void SampleAugmentationFilter -::sampleToOGRFeatures(const ogr::DataSource::Pointer& vectors, +::SampleToOGRFeatures(const ogr::DataSource::Pointer& vectors, ogr::DataSource* output, const SampleAugmentationFilter::SampleVectorType& samples, const size_t layerName, @@ -187,7 +187,7 @@ SampleAugmentationFilter { auto inputLayer = vectors->GetLayer(layerName); - auto excludedIds = this->getExcludedFieldsIds(excludedFields, inputLayer); + auto excludedIds = this->GetExcludedFieldsIds(excludedFields, inputLayer); OGRSpatialReference * oSRS = nullptr; if (inputLayer.GetSpatialRef()) @@ -206,7 +206,7 @@ SampleAugmentationFilter } auto featureCount = outputLayer.GetFeatureCount(false); - auto templateFeature = this->selectTemplateFeature(inputLayer, classField, label); + auto templateFeature = this->SelectTemplateFeature(inputLayer, classField, label); for(const auto& sample : samples) { ogr::Feature dstFeature(outputLayer.GetLayerDefn()); @@ -216,7 +216,7 @@ SampleAugmentationFilter for (int k=0 ; k < layerDefn.GetFieldCount() ; k++) { if(excludedIds.find(k) == excludedIds.cend() && - this->isNumericField(dstFeature, k)) + this->IsNumericField(dstFeature, k)) { dstFeature.ogr().SetField(k, sample[sampleFieldCounter++]); } @@ -227,7 +227,7 @@ SampleAugmentationFilter std::set<size_t> SampleAugmentationFilter -::getExcludedFieldsIds(const std::vector<std::string>& excludedFields, +::GetExcludedFieldsIds(const std::vector<std::string>& excludedFields, const ogr::Layer& inputLayer) { auto feature = *(inputLayer).begin(); @@ -245,7 +245,7 @@ SampleAugmentationFilter bool SampleAugmentationFilter -::isNumericField(const ogr::Feature& feature, +::IsNumericField(const ogr::Feature& feature, const int idx) { OGRFieldType fieldType = feature.ogr().GetFieldDefnRef(idx)->GetType(); @@ -256,7 +256,7 @@ SampleAugmentationFilter ogr::Feature SampleAugmentationFilter -::selectTemplateFeature(const ogr::Layer& inputLayer, +::SelectTemplateFeature(const ogr::Layer& inputLayer, const std::string& classField, int label) { auto wh = std::find_if(inputLayer.begin(), inputLayer.end(),