diff --git a/Learning/ObjectBased.py b/Learning/ObjectBased.py
index 3000c29af9a0a6100a46a8cab8aa197b90267e08..737b013abd5086fb1ed30f5d6f659e851b83e3d1 100644
--- a/Learning/ObjectBased.py
+++ b/Learning/ObjectBased.py
@@ -13,25 +13,51 @@ class ObjectBasedClassifier:
         for ras in user_feature_list:
             self.obia_base.add_raster_for_stats(ras)
         self.obia_base.populate_ref_db()
-
-    def train_RF(self, n_estimators, n_folds):
         L, X, Y, G, p2, p98 = self.obia_base.get_reference_db_as_training_base()
-        sgk = StratifiedGroupKFold(n_splits=n_folds, shuffle=True)
-        folds_indices = []
+        self.training_base = {
+            'obj_id': L,
+            'X': X,
+            'Y': Y,
+            'groups': G,
+            'perc2': p2,
+            'perc98': p98
+        }
+        return
+
+    def gen_k_folds(self, k):
+        self.training_base['folds'] = []
+        sgk = StratifiedGroupKFold(n_splits=k, shuffle=True)
+        for tr_i, ts_i in sgk.split(self.training_base['X'],
+                                    self.training_base['Y'],
+                                    self.training_base['groups']):
+            self.training_base['folds'].append((tr_i, ts_i))
+        return
+
+    def train_RF(self, n_estimators):
+        assert('folds' in self.training_base.keys())
         models = []
         results = []
-        for tr_i, ts_i in sgk.split(X, Y, G):
-            folds_indices.append((tr_i, ts_i))
+        for tr_i, ts_i in self.training_base['folds']:
             models.append(RandomForestClassifier(n_estimators=n_estimators))
-            models[-1].fit(X[tr_i], Y[tr_i])
-            l, c = L[ts_i], models[-1].predict(X[ts_i])
+            models[-1].fit(self.training_base['X'][tr_i], self.training_base['Y'][tr_i])
+            l, c = self.training_base['obj_id'][ts_i], models[-1].predict(self.training_base['X'][ts_i])
             y_true, y_pred = self.obia_base.true_pred_bypixel(l, c)
             results.append(
                 {
                     'conf_matrix': confusion_matrix(y_true, y_pred),
                     'accuracy': accuracy_score(y_true, y_pred),
                     'kappa' : cohen_kappa_score(y_true, y_pred),
-                    'p_r_f1': precision_recall_fscore_support(y_true, y_pred)
+                    'p_r_f1': precision_recall_fscore_support(y_true, y_pred, zero_division=0)
                 }
             )
-        return folds_indices, models, results
+            '''
+            summary = {
+                'accuracy_mean': np.mean([x['accuracy'] for x in results]),
+                'accuracy_std': np.std([x['accuracy'] for x in results]),
+                'kappa_mean': np.mean([x['kappa'] for x in results]),
+                'kappa_std': np.std([x['kappa'] for x in results]),
+                'f1_mean': np.mean([x['p_r_f1'][2] for x in results], axis=0),
+                'f1_std': np.std([x['p_r_f1'][2] for x in results], axis=0)
+            }
+            '''
+        return models, results