diff --git a/Modules/Learning/Sampling/include/otbSampleAugmentation.h b/Modules/Learning/Sampling/include/otbSampleAugmentation.h
index fe196e101ae66aeeadd27916bbb5bafcfbd7105f..7a51cd085bfc6c8fe4368ce45bc297bdfbdde370 100644
--- a/Modules/Learning/Sampling/include/otbSampleAugmentation.h
+++ b/Modules/Learning/Sampling/include/otbSampleAugmentation.h
@@ -46,7 +46,7 @@ Welford's algorithm
 SampleType EstimateStds(const SampleVectorType& samples)
 {
   const auto nbSamples = samples.size();
-  const auto nbComponents = samples[0].size();
+  const long nbComponents = static_cast<long>(samples[0].size());
   SampleType stds(nbComponents, 0.0);
   SampleType means(nbComponents, 0.0);
   for(size_t i=0; i<nbSamples; ++i)
@@ -55,7 +55,7 @@ SampleType EstimateStds(const SampleVectorType& samples)
 #ifdef _OPENMP
 #pragma omp parallel for
 #endif 
-    for(size_t j=0; j<nbComponents; ++j)
+    for(long j=0; j< nbComponents; ++j)
       {
       const auto mu = means[j];
       const auto x = samples[i][j];
@@ -67,7 +67,7 @@ SampleType EstimateStds(const SampleVectorType& samples)
 #ifdef _OPENMP
 #pragma omp parallel for
 #endif
-  for(size_t j=0; j<nbComponents; ++j)
+  for(long j=0; j< nbComponents; ++j)
     {
     stds[j] = std::sqrt(stds[j]/nbSamples);
     }
@@ -83,11 +83,12 @@ void ReplicateSamples(const SampleVectorType& inSamples,
                     SampleVectorType& newSamples)
 {
   newSamples.resize(nbSamples);
+  const long long nbSamplesLL = static_cast<long long>(nbSamples);
   size_t imod{0};
 #ifdef _OPENMP
 #pragma omp parallel for
 #endif
-  for(size_t i=0; i<nbSamples; ++i)
+  for(long long i=0; i< nbSamplesLL; ++i)
     {
     if (imod == inSamples.size()) imod = 0;
     newSamples[i] = inSamples[imod++];
@@ -108,7 +109,7 @@ void JitterSamples(const SampleVectorType& inSamples,
                    const int seed = std::time(nullptr))
 {
   newSamples.resize(nbSamples);
-  const auto nbComponents = inSamples[0].size();
+  const long nbComponents = static_cast<long>(inSamples[0].size());
   std::random_device rd;
   std::mt19937 gen(rd());
   // The input samples are selected randomly with replacement
@@ -120,7 +121,7 @@ void JitterSamples(const SampleVectorType& inSamples,
 #ifdef _OPENMP
 #pragma omp parallel for
 #endif
-  for(size_t i=0; i<nbComponents; ++i)
+  for(long i=0; i< nbComponents; ++i)
     gaussDis[i] = std::normal_distribution<double>{0.0, stds[i]/stdFactor};
 
   for(size_t i=0; i<nbSamples; ++i)
@@ -129,7 +130,7 @@ void JitterSamples(const SampleVectorType& inSamples,
 #ifdef _OPENMP
 #pragma omp parallel for
 #endif
-    for(size_t j=0; j<nbComponents; ++j)
+    for(long j=0; j< nbComponents; ++j)
       newSamples[i][j] += gaussDis[j](gen);
     }
 }
@@ -168,19 +169,20 @@ void FindKNNIndices(const SampleVectorType& inSamples,
                     const size_t nbNeighbors,
                     NNVectorType& nnVector)
 {
-  const auto nbSamples = inSamples.size();
+  const long long nbSamples = static_cast<long long>(inSamples.size());
   nnVector.resize(nbSamples);
   #ifdef _OPENMP
   #pragma omp parallel for
   #endif
-  for(size_t sampleIdx=0; sampleIdx<nbSamples; ++sampleIdx)
+  for(long long sampleIdx=0; sampleIdx< nbSamples; ++sampleIdx)
     {
     NNIndicesType nns;
-    for(size_t neighborIdx=0; neighborIdx<nbSamples; ++neighborIdx) 
+    for(long long neighborIdx=0; neighborIdx<nbSamples; ++neighborIdx)
       {
       if(sampleIdx!=neighborIdx)
-        nns.push_back({neighborIdx, ComputeSquareDistance(inSamples[sampleIdx],
-                                                          inSamples[neighborIdx])});
+        nns.push_back({static_cast<size_t>(neighborIdx),
+          ComputeSquareDistance(inSamples[sampleIdx],
+                                inSamples[neighborIdx])});
       }  
     std::partial_sort(nns.begin(), nns.begin()+nbNeighbors, nns.end(), NeighborSorter{});
     nns.resize(nbNeighbors);
@@ -211,6 +213,7 @@ void Smote(const SampleVectorType& inSamples,
            const int seed = std::time(nullptr))
 {
   newSamples.resize(nbSamples);
+  const long long nbSamplesLL = static_cast<long long>(nbSamples);
   NNVectorType nnVector;
   FindKNNIndices(inSamples, nbNeighbors, nnVector);
   // The input samples are selected randomly with replacement
@@ -218,7 +221,7 @@ void Smote(const SampleVectorType& inSamples,
   #ifdef _OPENMP
   #pragma omp parallel for
   #endif
-  for(size_t i=0; i<nbSamples; ++i)
+  for(long long i=0; i< nbSamplesLL; ++i)
     {
     const auto sampleIdx = std::rand()%(inSamples.size());
     const auto sample = inSamples[sampleIdx];