Пример #1
0
 def fillList(self):
     self.listWidget.clear()
     self.netHandler = netConfig_pb2.Param()
     self.data = open(root + '/net/netData.prototxt').read()
     text_format.Merge(self.data, self.netHandler)
     for elem in self.netHandler.net:
         self.listWidget.addItem(elem.name)
Пример #2
0
    def fillList(self):

        self.listWidgetNetList.addItem('Fault while loading')
        self.data = open(root + '/net/netData.prototxt').read()
        self.netHandler = netConfig_pb2.Param()
        self.protoHandler = caffe_pb2.NetParameter()
        text_format.Merge(self.data, self.netHandler)
        text_format.Merge(
            open(self.netHandler.net[self.index].protopath).read(),
            self.protoHandler)
        #Loading Net

        channel_swap = (
            2, 1, 0) if self.netHandler.net[self.index].channel_swap else None
        self.net = caffe.Classifier(
            str(self.netHandler.net[self.index].protopath),
            str(self.netHandler.net[self.index].modelpath),
            mean=np.load(str(self.netHandler.net[self.index].meanpath)),
            gpu=False,
            raw_scale=int(self.netHandler.net[self.index].raw_scale),
            channel_swap=channel_swap)

        self.listWidgetNetList.clear()
        #Loading Net Ends
        for elem in self.net.blobs.keys():
            item = QtGui.QListWidgetItem(elem)
            item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable)
            item.setCheckState(QtCore.Qt.Unchecked)
            self.listWidgetNetList.addItem(item)

        for fileName in os.listdir(root + '/data'):
            if fileName.endswith('.hdf5'):
                self.comboBoxSelectModel.addItem(fileName[0:len(fileName) - 5])
Пример #3
0
    def retranslateUi(self, Form):
        Form.setWindowTitle(_translate("Form", "Form", None))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab),
                                  _translate("Form", "Train Net", None))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2),
                                  _translate("Form", "Deploy Net", None))
        self.tabWidget.setTabText(
            self.tabWidget.indexOf(self.tab_3),
            _translate("Form", "Solver Configuration(Optional)", None))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_4),
                                  _translate("Form", "Other", None))
        self.label.setText(
            _translate("Form", "Save net configuration as", None))
        self.pushButton.setText(_translate("Form", "Save", None))
        self.netHandle = netConfig_pb2.Param()

        net_data_file = root + '/net/netData.prototxt'
        if not os.path.isfile(net_data_file):
            # TODO: This should be handled properly, but the file above is used all over the code.
            f = open(net_data_file, 'w')
            f.close()

        text_format.Merge(open(net_data_file).read(), self.netHandle)

        self.lineEdit.setText("Untitled")
        self.addTabs()
        self.onIndexChanged(self.index)
        self.pushButton.clicked.connect(self.onSubmitClicked)

        self.page0Widget.toolButton_5.clicked.connect(self.copyFromDeploySlot)
        self.page1Widget.toolButton_5.clicked.connect(self.copyFromTrainSlot)
Пример #4
0
    def loadFromListSlot(self, index):
        self.index = index
        self.netHandler = netConfig_pb2.Param()
        self.data = open(root + '/net/netData.prototxt').read()
        text_format.Merge(self.data, self.netHandler)
        if (self.trainMode == True):
            if (self.index != None):
                self.loadpath = self.netHandler.net[index].trainpath
                self.dim = [
                    self.netHandler.net[index].tdim0,
                    self.netHandler.net[index].tdim1,
                    self.netHandler.net[index].tdim2,
                    self.netHandler.net[index].tdim3
                ]
            else:
                self.loadpath = root + '/src/custom/' + 'defaultTrain.prototxt'
                self.dim = [100, 3, 227, 227]

        else:
            if (self.index != None):
                self.loadpath = self.netHandler.net[index].protopath
            else:
                self.loadpath = root + '/src/custom/' + 'defaultDeploy.prototxt'
        self.protohandler = caffe_pb2.NetParameter()
        text_format.Merge(open(self.loadpath).read(), self.protohandler)
        print self.protohandler
        self.textEdit.clear()
        self.textEdit.setText(self.protohandler.__str__())
        self.loadTreeWidget()
Пример #5
0
 def loadSolverParameters(self):
     self.data = open(root + '/net/netData.prototxt').read()
     self.netHandler = netConfig_pb2.Param()
     text_format.Merge(self.data, self.netHandler)
     self.protoHandler = caffe_pb2.SolverParameter()
     if (self.index != None and len(self.netHandler.net) > 0):
         text_format.Merge(
             open(self.netHandler.net[self.index].solverpath).read(),
             self.protoHandler)
     else:
         text_format.Merge(
             open(root + '/src/custom/defaultSolver.prototxt').read(),
             self.protoHandler)
     print self.protoHandler
Пример #6
0
 def fillList(self):
     self.data = open(root + '/net/netData.prototxt').read()
     self.listWidget.clear()
     self.netHandler = netConfig_pb2.Param()
     self.protoHandler = caffe_pb2.NetParameter()
     text_format.Merge(self.data, self.netHandler)
     text_format.Merge(
         open(self.netHandler.net[self.index].protopath).read(),
         self.protoHandler)
     for elem in self.protoHandler.layers:
         item = QtGui.QListWidgetItem(elem.name)
         item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable)
         item.setCheckState(QtCore.Qt.Unchecked)
         self.listWidget.addItem(item)
Пример #7
0
 def appendConfig(self, filename):
     self.data = open(root + '/net/netData.prototxt').read()
     self.netHandler = netConfig_pb2.Param()
     text_format.Merge(self.data, self.netHandler)
     newnet = self.netHandler.net.add()
     text_format.Merge(
         self.netHandler.net[self.listWidget.currentRow()].__str__(),
         newnet)
     newnet.protopath = root + '/net/models/deploy/' + filename + '.prototxt'
     newnet.name = filename.upper()
     open(root + '/net/netData.prototxt',
          'w').write(self.netHandler.__str__())
     print self.netHandler
     self.fillList()
     print 'append Config', filename
Пример #8
0
 def removeModelPathSlot(self):
     if (self.netName == None): return
     self.data = open(root + '/net/netData.prototxt').read()
     self.netHandler = netConfig_pb2.Param()
     text_format.Merge(self.data, self.netHandler)
     currentNet = None
     netIdx = None
     for idx, elem in enumerate(self.netHandler.net):
         if elem.name == self.netName.upper():
             currentNet = elem
             netIdx = idx
             self.netHandler.net[idx].modelpath = ''
             open(root + '/net/netData.prototxt',
                  'w').write(str(self.netHandler))
             self.lineEdit_3.clear()
             return
Пример #9
0
    def setFields(self):
        print 'IDX: ', self.index
        if (self.index == None):
            self.clearFields()
        else:
            self.netHandle = netConfig_pb2.Param()
            text_format.Merge(
                open(root + '/net/netData.prototxt').read(), self.netHandle)
            #self.netHandle.has_mean=True
            cn = self.netHandle.net[self.index]
            #1. Has Mean Setting
            if (cn.has_mean == True):
                self.checkBoxHasMean.setCheckState(QtCore.Qt.Checked)
            else:
                self.checkBoxHasMean.setCheckState(QtCore.Qt.Unchecked)

            #2.Mean Path Setting
            if (cn.HasField('meanpath')):
                self.lineEditMeanPath.setText(cn.meanpath)
            else:
                self.lineEditMeanPath.setText('')
            #3. Raw Scale Setting
            if (cn.HasField('raw_scale')):
                self.lineEditRawScale.setText(str(cn.raw_scale))
            else:
                self.lineEditRawScale.setText('')
            #4. Use GPU
            if (cn.gpu == True):
                self.checkBoxUseGPU.setCheckState(QtCore.Qt.Checked)
                self.lineEditGPUIndex.setText(str(cn.gpu_index))
                self.lineEditGPUIndex.show()
                self.labelUseGPUIndex.show()
            else:
                self.checkBoxUseGPU.setCheckState(QtCore.Qt.Unchecked)
                self.lineEditGPUIndex.hide()
                self.labelUseGPUIndex.hide()
            #5. Channel Swap
            if (cn.channel_swap == True):
                self.checkBoxChannelSwap.setCheckState(QtCore.Qt.Checked)
            else:
                self.checkBoxChannelSwap.setCheckState(QtCore.Qt.Unchecked)
            #6. Model Path
            if (cn.HasField('modelpath')):
                self.lineEditModelPath.setText(cn.modelpath)
            else:
                self.lineEditModelPath.setText('')
Пример #10
0
    def setPath(self):
        #Clear previous Properties

        if (self.netName == None): return
        self.data = open(root + '/net/netData.prototxt').read()
        self.netHandler = netConfig_pb2.Param()
        text_format.Merge(self.data, self.netHandler)
        currentNet = None
        for elem in self.netHandler.net:
            if elem.name == self.netName.upper(): currentNet = elem
        if (currentNet == None): return
        if (currentNet.HasField('trainpath') and currentNet.trainpath != ''):
            self.lineEdit.setText(currentNet.trainpath)
        if (currentNet.HasField('protopath') and currentNet.protopath != ''):
            self.lineEdit_2.setText(currentNet.protopath)
        if (currentNet.HasField('modelpath') and currentNet.modelpath != ''):
            self.lineEdit_3.setText(currentNet.modelpath)
        if (currentNet.HasField('meanpath') and currentNet.meanpath != ''):
            self.lineEdit_4.setText(currentNet.meanpath)
Пример #11
0
    def fillData(self):
        self.comboBox.clear()
        self.comboBox_2.clear()
        #Fill the data in all the comboBoxes
        #Step 1 : Fill the Deploy List
        self.netHandler = netConfig_pb2.Param()
        text_format.Merge(
            open(root + '/net/netData.prototxt').read(), self.netHandler)
        for elem in self.netHandler.net:
            if (elem.HasField('modelpath')
                    and elem.modelpath.endswith('.caffemodel')):
                print elem.protopath
                self.comboBox_2.addItem(elem.name)

        #Filling the Data List Here
        self.comboBox.addItems([
            files[0:-5] for files in os.listdir(root + '/data')
            if files.endswith('.hdf5')
        ])
Пример #12
0
    def __init__(self, netName, netList, batchSize, dataName, saveName):
        self.batchSize = batchSize

        self.netHandler = netConfig_pb2.Param()
        text_format.Merge(
            open(root + '/net/netData.prototxt').read(), self.netHandler)

        self.currentNet = netConfig_pb2.NetParam()
        for elem in self.netHandler.net:
            print elem.name, netName
            if elem.name == netName: self.currentNet.CopyFrom(elem)

        self.protoHandler = caffe_pb2.NetParameter()
        text_format.Merge(
            open(self.currentNet.protopath).read(), self.protoHandler)

        self.dataName = dataName
        self.saveName = saveName
        self.netList = netList
        self.netName = netName
Пример #13
0
    def retranslateUi(self, Form):
        Form.setWindowTitle(_translate("Form", "Form", None))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab),
                                  _translate("Form", "Train Net", None))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2),
                                  _translate("Form", "Deploy Net", None))
        self.tabWidget.setTabText(
            self.tabWidget.indexOf(self.tab_3),
            _translate("Form", "Solver Configuration(Optional)", None))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_4),
                                  _translate("Form", "Other", None))
        self.label.setText(
            _translate("Form", "Save net configuration as", None))
        self.pushButton.setText(_translate("Form", "Save", None))
        self.netHandle = netConfig_pb2.Param()
        text_format.Merge(
            open(root + '/net/netData.prototxt').read(), self.netHandle)
        self.lineEdit.setText("Untitled")
        self.addTabs()
        self.onIndexChanged(self.index)
        self.pushButton.clicked.connect(self.onSubmitClicked)

        self.page0Widget.toolButton_5.clicked.connect(self.copyFromDeploySlot)
        self.page1Widget.toolButton_5.clicked.connect(self.copyFromTrainSlot)
Пример #14
0
    def changeNet(self):
	    self.netHandler=netConfig_pb2.Param()
	    text_format.Merge(open(root+'/net/netData.prototxt').read(),self.netHandler)
	    print self.netHandler

	    if(self.trainMode==True):
	        if self.index!=None and self.netHandler.net[self.index].HasField('trainpath') and os.path.exists(self.netHandler.net[self.index].trainpath):
	    	    self.subWidget.loadFromListSlot(self.index)
		    self.label.setText(self.netHandler.net[self.index].trainpath)		    
	        else:
		    #self.subWidget=netWidget.MyForm(root+'/src/custom/defaultTrain.prototxt',parent=self.widget,trainMode=self.trainMode)
		    self.subWidget.loadFromListSlot(self.index)
	    	    self.label.setText(root+'/src/custom/defaultTrain.prototxt')
		return
   
	    if(self.trainMode==False):
	        if self.index!=None and self.netHandler.net[self.index].HasField('protopath') and os.path.exists(self.netHandler.net[self.index].protopath):
	    	    self.subWidget.loadFromListSlot(self.index)
		    self.label.setText(self.netHandler.net[self.index].protopath)		    
	        else:
		    #self.subWidget=netWidget.MyForm(root+'/src/custom/defaultDeploy.prototxt',parent=self.widget,trainMode=self.trainMode)
		    self.subWidget.loadFromListSlot(self.index)
	   	    self.label.setText(root+'/src/custom/defaultDeploy.prototxt')
	        return	
Пример #15
0
import scipy
import scipy.misc
import matplotlib.pyplot as plt
from google.protobuf import text_format

print sys.argv

#Step 0 : Initialize Parameters
expName = sys.argv[1]
netName = str(sys.argv[2])
batchSize = int(sys.argv[3])
layerName = sys.argv[4]
dataName = sys.argv[5]
netIdx = None

netHandler = netConfig_pb2.Param()
text_format.Merge(open(root + '/net/netData.prototxt').read(), netHandler)
for idx, elem in enumerate(netHandler.net):
    if (netName == elem.name): netIdx = idx
currentNet = netHandler.net[netIdx]

saveName = root + '/net/temp/temp_' + str(
    currentNet.name) + '_' + dataName + '_' + expName + '_' + str(
        batchSize) + '.prototxt'
logName = root + '/net/temp/temp_' + str(
    currentNet.name) + '_' + dataName + '_' + expName + '_' + str(
        batchSize) + '_log.txt'

#Step 1 : Create Deploy unto that layer
handle = caffe_pb2.NetParameter()
text_format.Merge(open(currentNet.protopath).read(), handle)
Пример #16
0
 def refreshTrigger(self, extra=None):
     self.netHandle = netConfig_pb2.Param()
     text_format.Merge(
         open(root + '/net/netData.prototxt').read(), self.netHandle)
Пример #17
0
    def onSubmitClicked(self):
        self.netHandle = netConfig_pb2.Param()
        self.data = open(root + '/net/netData.prototxt').read()
        text_format.Merge(self.data, self.netHandle)

        print 'Net is now saving its configuration'
        ch = None
        for item in self.netHandle.net:
            if (item.name == self.lineEdit.text().__str__().upper()): ch = item
#ch=self.netHandle.net[index] #Current Handle of the net
#Step 1 : Create Folder with all the configurations and save it
        savefolder = root + '/net/data/' + self.lineEdit.text().__str__(
        ).lower()

        if os.path.exists(savefolder):
            reply = QtGui.QMessageBox.question(self, 'Message',\
                   "Are you sure to override existing?", QtGui.QMessageBox.Yes | \
                   QtGui.QMessageBox.No, QtGui.QMessageBox.No)
            found = False
            for idx, elem in enumerate(self.netHandle.net):
                if elem.name == self.lineEdit.text().__str__().upper():
                    ch = self.netHandle.net[idx]
                    found = True
            if (found == False):
                ch = self.netHandle.net.add()
                ch.name = self.lineEdit.text().__str__().upper()
            if (reply == QtGui.QMessageBox.No): return
        else:
            os.mkdir(savefolder)
            ch = self.netHandle.net.add()
            ch.name = self.lineEdit.text().__str__().upper()

#Step 1.1 : Saving Train Net
        extension = self.lineEdit.text().__str__().lower() + '_train.prototxt'
        if os.path.exists(savefolder + '/' + extension):
            reply = QtGui.QMessageBox.question(self, 'Message',\
                   "Are you sure to override existing Train File?", QtGui.QMessageBox.Yes | \
                   QtGui.QMessageBox.No, QtGui.QMessageBox.No)
            if (reply == QtGui.QMessageBox.Yes):
                open(savefolder + '/' + extension,
                     'w').write(self.page0Widget.subWidget.textEdit.
                                toPlainText().__str__())
                ch.trainpath = savefolder + '/' + extension
        else:
            open(savefolder + '/' + extension, 'w').write(
                self.page0Widget.subWidget.textEdit.toPlainText().__str__())
            ch.trainpath = savefolder + '/' + extension
            ch.tdim0 = self.page0Widget.subWidget.dim[0]
            ch.tdim1 = self.page0Widget.subWidget.dim[1]
            ch.tdim2 = self.page0Widget.subWidget.dim[2]
            ch.tdim3 = self.page0Widget.subWidget.dim[3]

#Step 1.2 : Saving Deploy Net
        extension = self.lineEdit.text().__str__().lower() + '_deploy.prototxt'
        if os.path.exists(savefolder + '/' + extension):
            reply = QtGui.QMessageBox.question(self, 'Message',\
                   "Are you sure to override existing Deploy File?", QtGui.QMessageBox.Yes | \
                   QtGui.QMessageBox.No, QtGui.QMessageBox.No)
            if (reply == QtGui.QMessageBox.Yes):
                open(savefolder + '/' + extension,
                     'w').write(self.page1Widget.subWidget.textEdit.
                                toPlainText().__str__())
                ch.protopath = savefolder + '/' + extension

        else:
            open(savefolder + '/' + extension, 'w').write(
                self.page1Widget.subWidget.textEdit.toPlainText().__str__())
            ch.protopath = savefolder + '/' + extension

#Step 1.3 Saving Model File
        extension = self.lineEdit.text().__str__().lower(
        ) + '_model.caffemodel'
        modelpath = self.page3Widget.lineEditModelPath.text().__str__()
        if (modelpath != '' and modelpath.endswith('.caffemodel')):
            #Copy Model Path
            if os.path.exists(savefolder + '/' + extension):
                reply = QtGui.QMessageBox.question(self, 'Message',\
                       "Are you sure to override existing Model File?", QtGui.QMessageBox.Yes | \
                       QtGui.QMessageBox.No, QtGui.QMessageBox.No)
                if (reply == QtGui.QMessageBox.Yes
                        and modelpath != savefolder + '/' + extension):
                    shutil.copy(modelpath, savefolder + '/' + extension)
                    ch.modelpath = savefolder + '/' + extension

            else:
                if (modelpath != savefolder + '/' + extension):
                    shutil.copy(modelpath, savefolder + '/' + extension)
                ch.modelpath = savefolder + '/' + extension

        else:
            QtGui.QMessageBox.critical(self, 'Warning',\
                   "Model File is MUST for both training and Deploy.Please include Path")

#Other Parameters Assignment and copying
#Other 1
        ch.has_mean = self.page3Widget.checkBoxHasMean.isChecked(
        ) and self.page3Widget.lineEditMeanPath.text().__str__() != ''

        if (self.page3Widget.lineEditMeanPath.text().__str__() != ''):
            ch.meanpath = self.page3Widget.lineEditMeanPath.text().__str__()

        if (self.page3Widget.lineEditRawScale.text().__str__() != ''):
            ch.raw_scale = int(
                self.page3Widget.lineEditRawScale.text().__str__())
        ch.gpu = self.page3Widget.checkBoxUseGPU.isChecked()
        ch.gpu_index = int(self.page3Widget.lineEditGPUIndex.text().__str__())
        ch.channel_swap = self.page3Widget.checkBoxChannelSwap.isChecked()
        print ch

        #Solver Parameters for saving . . .
        extension = self.lineEdit.text().__str__().lower() + '_solver.prototxt'
        with open(savefolder + '/' + extension, 'w') as f:
            print self.page2Widget.protoHandler
            self.page2Widget.updateHandle()
            self.page2Widget.protoHandler.net = (
                savefolder + '/' + self.lineEdit.text().__str__().lower() +
                '_train.prototxt')
            self.page2Widget.protoHandler.snapshot_prefix = savefolder
            self.page2Widget.protoHandler.solver_mode = self.page3Widget.checkBoxUseGPU.isChecked(
            )

            f.write(self.page2Widget.protoHandler.__str__())
            ch.solverpath = savefolder + '/' + extension

#self.lineEdit.text().__str__().lower()+
#Other Ends
        open(root + '/net/netData.prototxt',
             'w').write(self.netHandle.__str__())
        self.signalCompleteTrigger.emit(self.lineEdit.text().__str__().upper())
        self.signalRefreshTrigger.emit("Net(" +
                                       self.lineEdit.text().__str__().upper() +
                                       ") is bieng saved")
Пример #18
0
    def createConfiguration(self, extra=None):
        name = self.page3Widget.lineEditConfigName.text().__str__().lower()
        path = root + '/net/train/' + self.page3Widget.lineEditConfigName.text(
        ).__str__().lower()
        self.path = path
        print 'PATH!!!', path
        # 1. Create Folder in train
        if (os.path.exists(path) == False):
            os.mkdir(
                root + '/net/train/' +
                self.page3Widget.lineEditConfigName.text().__str__().lower())
        # 2. Add train_net,solver,etc into it.
        self.index = self.page1NetEditor.index
        self.maxIterations = 10000
        self.netHandler = netConfig_pb2.Param()
        self.data = open(root + '/net/netData.prototxt').read()
        text_format.Merge(self.data, self.netHandler)
        print self.netHandler.net[self.index]
        open(path + '/' + name + '_train.prototxt', 'w').write(
            open(self.netHandler.net[self.index].trainpath, 'r').read())
        with open(path + '/' + name + '_solver.prototxt', 'w') as f:
            solverHandle = caffe_pb2.SolverParameter()
            #Loading it instant
            self.page2Widget.updateHandle()
            text_format.Merge(self.page2Widget.protoHandler.__str__(),
                              solverHandle)
            #Loading it instant ends
            #text_format.Merge(open(self.netHandler.net[self.index].solverpath,'r').read(),solverHandle)
            solverHandle.snapshot_prefix = (path + '/' + name)
            solverHandle.net = (path + '/' + name + '_train.prototxt')
            if (self.netHandler.net[self.index].gpu == True):
                solverHandle.solver_mode = 1
            else:
                solverHandle.solver_mode = 0
            #Getting solver maximum iterations
            self.maxIterations = solverHandle.max_iter
            #Getting solver iterations ends
            open(self.netHandler.net[self.index].solverpath,
                 'w').write(solverHandle.__str__())
            f.write(solverHandle.__str__())

        ### FINETUNE STARTS
        self.isFinetune = False
        if (self.netHandler.net[self.index].modelpath != ""):
            reply = QtGui.QMessageBox.question(
                self, 'Message',
                "Do you want to finetune using existing weights?",
                QtGui.QMessageBox.Yes | QtGui.QMessageBox.No,
                QtGui.QMessageBox.No)
            if (reply == QtGui.QMessageBox.Yes): self.isFinetune = True
        ### FINETUNE ENDS
        trainDataName = self.page3Widget.widget.comboBoxTraining.currentText()
        validationDataName = self.page3Widget.widget.comboBoxValidation.currentText(
        )
        shutil.copy(root + '/data/' + trainDataName + '.hdf5',
                    path + '/' + name + '_train.hdf5')
        shutil.copy(root + '/data/' + validationDataName + '.hdf5',
                    path + '/' + name + '_val.hdf5')
        with open(path + '/' + name + '_trainscript.sh', 'w') as f:
            f.write("#!/usr/bin/env sh\n")
            #f.write("cd $CAFFE_ROOT\n")
            otherarguments = ' -weights ' + self.netHandler.net[
                self.index].modelpath if self.isFinetune == True else ''
            if (self.netHandler.net[self.index].gpu == True):
                otherarguments = otherarguments + ' -gpu ' + str(
                    self.netHandler.net[self.index].gpu_index)
            f.write(
                os.getenv('CAFFE_ROOT') +
                '/build/tools/caffe train --solver=' + path + '/' + name +
                '_solver.prototxt' + otherarguments + '\n')
            f.write('echo \'Train Completed \'')
        with open(path + '/' + name + '_train.txt', 'w') as f:
            f.write(path + '/' + name + '_train.hdf5')
        with open(path + '/' + name + '_val.txt', 'w') as f:
            f.write(path + '/' + name + '_val.hdf5')

        #Change The train_test prototxt to associate right data
        handle = caffe_pb2.NetParameter()
        text_format.Merge(
            open(path + '/' + name + '_train.prototxt').read(), handle)
        ######### NEW VERSION #########################
        if len(handle.layers) == 0:
            if (True):
                if (True):
                    #if(handle.layers[0].type in [5,12,29,24]):
                    #del handle.layers[0].data_param
                    layerHandle = caffe_pb2.LayerParameter()
                    text_format.Merge(
                        open(root +
                             '/net/defaultHDF5TrainDataNew.prototxt').read(),
                        layerHandle)
                    #if(self.netHandler.net[self.index].has_mean==True):
                    #layerHandle.transform_param
                    #layerHandle.transform_param.mean_file=self.netHandler.net[self.index].meanpath
                    #else:
                    #layerHandle.ClearField('transform_param')
                    handle.layer[0].CopyFrom(layerHandle)
                    handle.layer[0].name = name.lower()
                    #BatchSize Starts
                    batchSize = self.page3Widget.widget.lineEditBatchSizeTraining.text(
                    ).__str__()
                    batchSize = 100 if batchSize == "" else int(batchSize)
                    handle.layer[0].hdf5_data_param.batch_size = batchSize
                    #BatchSize Ends
                    handle.layer[
                        0].hdf5_data_param.source = path + '/' + name + '_train.txt'
                    print handle.layer[0]

                if (self.page3Widget.widget.checkBoxValidation.checkState() >
                        0):
                    #if(handle.layers[1].type in [5,12,29,24]):#handle.layers[1].type="HDF5Data"
                    layerHandle = caffe_pb2.LayerParameter()
                    text_format.Merge(
                        open(root +
                             '/net/defaultHDF5TestDataNew.prototxt').read(),
                        layerHandle)
                    handle.layer[1].CopyFrom(layerHandle)
                    handle.layer[1].name = name
                    #BatchSize Starts
                    batchSize = self.page3Widget.widget.lineEditBatchSizeValidation.text(
                    ).__str__()
                    batchSize = 100 if batchSize == "" else int(batchSize)
                    handle.layer[1].hdf5_data_param.batch_size = batchSize
                    #BatchSize Ends
                    handle.layer[
                        1].hdf5_data_param.source = path + '/' + name + '_val.txt'
                    print handle.layer[1]
                else:
                    del handle.layer[1]
                    for layerIdx, layer in enumerate(handle.layer):
                        for incIdx, inc in enumerate(layer.include):
                            if inc.HasField('phase'):
                                if (inc.phase == 0):
                                    del handle.layer[layerIdx].include[incIdx]
                                    #Check Later what happens if only 'phase' is removed.
                                else:
                                    del handle.layer[layerIdx]

                    #if(self.netHandler.net[self.index].has_mean==True):
                        #layerHandle.transform_param
                        #layerHandle.transform_param.mean_file=self.netHandler.net[self.index].meanpath
                        #else:
                        #layerHandle.ClearField('transform_param')

        ################ OLD VERSION #########################
        else:
            if (True):
                if (True):
                    #if(handle.layers[0].type in [5,12,29,24]):
                    #del handle.layers[0].data_param
                    layerHandle = caffe_pb2.LayerParameter()
                    text_format.Merge(
                        open(root +
                             '/net/defaultHDF5TrainData.prototxt').read(),
                        layerHandle)
                    handle.layers[0].name = name.lower()
                    if (self.netHandler.net[self.index].has_mean == True):

                        #layerHandle.transform_param
                        layerHandle.transform_param.mean_file = self.netHandler.net[
                            self.index].meanpath
                    else:
                        layerHandle.ClearField('transform_param')

                    handle.layers[0].CopyFrom(layerHandle)
                    #BatchSize Starts
                    batchSize = self.page3Widget.widget.lineEditBatchSizeTraining.text(
                    ).__str__()
                    batchSize = 100 if batchSize == "" else int(batchSize)
                    handle.layer[0].hdf5_data_param.batch_size = batchSize
                    #BatchSize Ends

                    handle.layers[
                        0].hdf5_data_param.source = path + '/' + name + '_train.txt'
                    print handle.layers[0]

                if (self.page3Widget.widget.checkBoxValidation.checkState() >
                        0):
                    #if(handle.layers[1].type in [5,12,29,24]):#handle.layers[1].type="HDF5Data"
                    layerHandle = caffe_pb2.LayerParameter()
                    text_format.Merge(
                        open(root +
                             '/net/defaultHDF5TestData.prototxt').read(),
                        layerHandle)
                    handle.layers[1].name = name
                    handle.layers[1].CopyFrom(layerHandle)
                    #BatchSize Starts
                    batchSize = self.page3Widget.widget.lineEditBatchSizeValidation.text(
                    ).__str__()
                    batchSize = 100 if batchSize == "" else int(batchSize)
                    handle.layer[1].hdf5_data_param.batch_size = batchSize
                    #BatchSize Ends
                    handle.layers[
                        1].hdf5_data_param.source = path + '/' + name + '_val.txt'
                    print handle.layers[1]
                    if (self.netHandler.net[self.index].has_mean == True):
                        #layerHandle.transform_param
                        layerHandle.transform_param.mean_file = self.netHandler.net[
                            self.index].meanpath
                    else:
                        layerHandle.ClearField('transform_param')
                else:
                    del handle.layers[1]

        ####### REMODIFICATION OF FIRST TWO LAYERS START

        open(path + '/' + name + '_train.prototxt',
             'w').write(handle.__str__())
        print 'PATH BEFORE PROGRESS', path

        triggerList = self.createTriggerList()
        inthread(self.runParallel, name, path, triggerList, self.maxIterations,
                 str(self.netHandler.net[self.index]))