Switch to side-by-side view

--- a
+++ b/src/LiviaNet/Modules/Parsers/parsersUtils.py
@@ -0,0 +1,139 @@
+""" 
+Copyright (c) 2016, Jose Dolz .All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    1. Redistributions of source code must retain the above copyright notice,
+       this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright notice,
+       this list of conditions and the following disclaimer in the documentation
+       and/or other materials provided with the distribution.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+    OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+    HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+    WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+    OTHER DEALINGS IN THE SOFTWARE.
+
+Jose Dolz. Dec, 2016.
+email: jose.dolz.upv@gmail.com
+LIVIA Department, ETS, Montreal.
+"""
+ 
+import ConfigParser
+import json
+import os
+
+# -------- Parse parameters to create the network model -------- #
+class parserConfigIni(object):
+   def __init__(_self):
+      _self.networkName = []
+      
+   #@staticmethod
+   def readConfigIniFile(_self,fileName,task):
+      # Task: 0-> Generate model
+      #       1-> Train model
+      #       2-> Segmentation
+
+      def createModel():
+          print (" --- Creating model (Reading parameters...)")
+          _self.readModelCreation_params(fileName)
+      def trainModel():
+          print (" --- Training model (Reading parameters...)")
+          _self.readModelTraining_params(fileName)
+      def testModel():
+          print (" --- Testing model (Reading parameters...)")
+          _self.readModelTesting_params(fileName)
+       
+        # TODO. Include more optimizers here
+      optionsParser = {0 : createModel,
+                       1 : trainModel,
+                       2 : testModel}
+      optionsParser[task]()
+
+   # Read parameters to Generate model
+   def readModelCreation_params(_self,fileName) :
+      ConfigIni = ConfigParser.ConfigParser()
+      ConfigIni.read(fileName)
+      # ------- General --------- #
+      _self.networkName = ConfigIni.get('General','networkName')
+      _self.folderName  = ConfigIni.get('General','folderName')
+      
+      # ------- Network Architecture ------- #
+      _self.n_classes                    = json.loads(ConfigIni.get('CNN_Architecture','n_classes')) # Number of (segmentation) classes
+      _self.layers                       = json.loads(ConfigIni.get('CNN_Architecture','numkernelsperlayer'))  # Number of layers
+      _self.kernels                      = json.loads(ConfigIni.get('CNN_Architecture','kernelshapes')) # Kernels shape
+      _self.intermediate_ConnectedLayers = json.loads(ConfigIni.get('CNN_Architecture','intermediateConnectedLayers'))
+      _self.pooling_scales               = json.loads(ConfigIni.get('CNN_Architecture','pooling_scales')) # Pooling
+      _self.dropout_Rates                = json.loads(ConfigIni.get('CNN_Architecture','dropout_Rates')) # Dropout
+      _self.activationType               = json.loads(ConfigIni.get('CNN_Architecture','activationType')) # Activation Typ
+      _self.weight_Initialization_CNN    = json.loads(ConfigIni.get('CNN_Architecture','weight_Initialization_CNN')) # weight_Initialization (CNN)
+      _self.weight_Initialization_FCN    = json.loads(ConfigIni.get('CNN_Architecture','weight_Initialization_FCN')) # weight_Initialization (FCN)
+      _self.weightsFolderName            = ConfigIni.get('CNN_Architecture','weights folderName') # weights folder
+      _self.weightsTrainedIdx            = json.loads(ConfigIni.get('CNN_Architecture','weights trained indexes')) # weights indexes to employ
+
+      _self.batch_size                   = json.loads(ConfigIni.get('Training Parameters','batch_size')) # Batch size
+      _self.sampleSize_Train             = json.loads(ConfigIni.get('Training Parameters','sampleSize_Train'))
+      _self.sampleSize_Test              = json.loads(ConfigIni.get('Training Parameters','sampleSize_Test'))
+
+      _self.costFunction       = json.loads(ConfigIni.get('Training Parameters','costFunction'))
+      _self.L1_reg_C           = json.loads(ConfigIni.get('Training Parameters','L1 Regularization Constant'))
+      _self.L2_reg_C           = json.loads(ConfigIni.get('Training Parameters','L2 Regularization Constant'))
+      _self.learning_rate      = json.loads(ConfigIni.get('Training Parameters','Leraning Rate'))
+      _self.momentumType       = json.loads(ConfigIni.get('Training Parameters','Momentum Type'))
+      _self.momentumValue      = json.loads(ConfigIni.get('Training Parameters','Momentum Value'))
+      _self.momentumNormalized = json.loads(ConfigIni.get('Training Parameters','momentumNormalized'))
+      _self.optimizerType      = json.loads(ConfigIni.get('Training Parameters','Optimizer Type'))
+      _self.rho_RMSProp        = json.loads(ConfigIni.get('Training Parameters','Rho RMSProp'))
+      _self.epsilon_RMSProp    = json.loads(ConfigIni.get('Training Parameters','Epsilon RMSProp'))
+      applyBatchNorm           = json.loads(ConfigIni.get('Training Parameters','applyBatchNormalization'))
+
+      if applyBatchNorm == 1:
+          _self.applyBatchNorm = True
+      else:
+          _self.applyBatchNorm = False
+      
+      _self.BatchNormEpochs   = json.loads(ConfigIni.get('Training Parameters','BatchNormEpochs'))
+      _self.tempSoftMax       = json.loads(ConfigIni.get('Training Parameters','SoftMax temperature'))
+
+      # TODO: Do some sanity checks
+
+   # Read parameters to TRAIN model
+   def readModelTraining_params(_self,fileName) :
+      ConfigIni = ConfigParser.ConfigParser()
+      ConfigIni.read(fileName)
+
+      # Get training/validation image names
+      # Paths
+      _self.imagesFolder             = ConfigIni.get('Training Images','imagesFolder')
+      _self.GroundTruthFolder        = ConfigIni.get('Training Images','GroundTruthFolder')
+      _self.ROIFolder                = ConfigIni.get('Training Images','ROIFolder')
+      _self.indexesForTraining       = json.loads(ConfigIni.get('Training Images','indexesForTraining'))
+      _self.indexesForValidation     = json.loads(ConfigIni.get('Training Images','indexesForValidation'))
+      _self.imageTypesTrain          = json.loads(ConfigIni.get('Training Images','imageTypes'))
+      
+      # training params
+      _self.numberOfEpochs                    = json.loads(ConfigIni.get('Training Parameters','number of Epochs'))
+      _self.numberOfSubEpochs                 = json.loads(ConfigIni.get('Training Parameters','number of SubEpochs'))
+      _self.numberOfSamplesSupEpoch           = json.loads(ConfigIni.get('Training Parameters','number of samples at each SubEpoch Train'))
+      _self.firstEpochChangeLR                = json.loads(ConfigIni.get('Training Parameters','First Epoch Change LR'))
+      _self.frequencyChangeLR                 = json.loads(ConfigIni.get('Training Parameters','Frequency Change LR'))
+      _self.applyPadding                      = json.loads(ConfigIni.get('Training Parameters','applyPadding'))  
+
+   def readModelTesting_params(_self,fileName) :
+      ConfigIni = ConfigParser.ConfigParser()
+      ConfigIni.read(fileName)
+ 
+      _self.imagesFolder      = ConfigIni.get('Segmentation Images','imagesFolder')
+      _self.GroundTruthFolder = ConfigIni.get('Segmentation Images','GroundTruthFolder')
+      _self.ROIFolder         = ConfigIni.get('Segmentation Images','ROIFolder')
+     
+      _self.imageTypes        = json.loads(ConfigIni.get('Segmentation Images','imageTypes'))
+      _self.indexesToSegment  = json.loads(ConfigIni.get('Segmentation Images','indexesToSegment'))
+      _self.applyPadding      = json.loads(ConfigIni.get('Segmentation Images','applyPadding'))
+      
+