示例#1
0
 def ref_to_str(self, ref):
     secRefs = self.dat_['#refs#'][ref][:]
     ch = []
     #print secRefs
     for sec in secRefs:
         if not sec == 0:
             #If the reference is not empty
             ch.append(ou.ints_to_str(self.dat_['#refs#'][sec[0]]))
     return ch
	def ref_to_str(self, ref):
		secRefs = self.dat_['#refs#'][ref][:]
		ch = []
		#print secRefs
		for sec in secRefs:
			if not sec == 0:
				#If the reference is not empty
				ch.append(ou.ints_to_str(self.dat_['#refs#'][sec[0]]))
		return ch
示例#3
0
    def save_caffe_model(
            self,
            outName='/work4/pulkitag-code/code/ief/IEF/models/ief-googlenet-dec2015',
            **kwargs):
        #caffe prototxt
        defFile = outName + '.prototxt'
        #caffe model
        modelFile = outName + '.caffemodel'
        #the meta data
        metaFile = outName + '-meta.pkl'

        #obtain prototxt from matconvnet and write to disk
        pDef = self.to_caffe(**kwargs)
        pDef.write(defFile)

        #Store th weights
        net = caffe.Net(defFile, caffe.TEST)
        #List the parameter names of all the matconvnet params
        matPrmNames = []
        for p in range(len(self.dat_['net']['params']['name'])):
            prmRef = self.dat_['net']['params']['name'][p][0]
            matPrmNames.append(ou.ints_to_str(self.dat_['#refs#'][prmRef][:]))
        #Name of caffe params
        paramKeys = net.params.keys()
        for k in paramKeys:
            for i in range(2):
                prm = pDef.get_layer_property(k, 'param', propNum=i)
                prmName = prm['name'][1:-1]
                idx = matPrmNames.index(prmName)
                valRef = self.dat_['net']['params']['value'][idx][0]
                vals = np.array(self.dat_['#refs#'][valRef])
                if i == 0:
                    vals = vals.transpose((0, 1, 3, 2))
                print(k, i, net.params[k][i].data.shape, vals.shape)
                net.params[k][i].data[...] = vals.reshape(
                    net.params[k][i].data.shape)
        net.save(modelFile)

        #Store meta information
        seedPose = np.array(self.dat_['params']['seed_pose'])
        mxStpNrm = np.array(self.dat_['params']['MAX_STEP_NORM'])[0][0]
        pickle.dump({
            'seedPose': seedPose,
            'mxStepNorm': mxStpNrm
        }, open(metaFile, 'w'))
	def save_caffe_model(self,
			 outName='/work4/pulkitag-code/code/ief/IEF/models/ief-googlenet-dec2015', **kwargs):
		#caffe prototxt
		defFile   = outName + '.prototxt'
		#caffe model
		modelFile = outName + '.caffemodel'
		#the meta data
		metaFile  = outName + '-meta.pkl'
	
		#obtain prototxt from matconvnet and write to disk 
		pDef      = self.to_caffe(**kwargs)
		pDef.write(defFile)

		#Store th weights	
		net = caffe.Net(defFile, caffe.TEST)
		#List the parameter names of all the matconvnet params
		matPrmNames = []
		for p in range(len(self.dat_['net']['params']['name'])):
			prmRef = self.dat_['net']['params']['name'][p][0]
			matPrmNames.append(ou.ints_to_str(self.dat_['#refs#'][prmRef][:]))
		#Name of caffe params
		paramKeys = net.params.keys()
		for k in paramKeys:
			for i in range(2):
				prm     = pDef.get_layer_property(k, 'param', propNum=i)
				prmName = prm['name'][1:-1]
				idx     = matPrmNames.index(prmName)
				valRef  = self.dat_['net']['params']['value'][idx][0]
				vals    = np.array(self.dat_['#refs#'][valRef])
				if i==0:
					vals = vals.transpose((0,1,3,2))
				print (k, i, net.params[k][i].data.shape, vals.shape)
				net.params[k][i].data[...] = vals.reshape(net.params[k][i].data.shape) 
		net.save(modelFile)

		#Store meta information
		seedPose = np.array(self.dat_['params']['seed_pose'])
		mxStpNrm = np.array(self.dat_['params']['MAX_STEP_NORM'])[0][0]
		pickle.dump({'seedPose': seedPose, 'mxStepNorm': mxStpNrm}, 
								open(metaFile, 'w'))	
示例#5
0
    def make_caffe_layer(self, lNum):
        #Get the name
        nameRef = self.dat_['net']['layers']['name'][lNum][0]
        name = ou.ints_to_str(self.dat_['#refs#'][nameRef][:])
        #Get the inputs
        ipRef = self.dat_['net']['layers']['inputs'][lNum][0]
        ipNames = self.ref_to_str(ipRef)
        #Get the parameter names
        pmRef = self.dat_['net']['layers']['params'][lNum][0]
        pmNames = self.ref_to_str(pmRef)
        #Get the output names
        opRef = self.dat_['net']['layers']['outputs'][lNum][0]
        opNames = self.ref_to_str(opRef)
        #Get the layer type
        tpRef = self.dat_['net']['layers']['type'][lNum][0]
        lType = ou.ints_to_str(self.dat_['#refs#'][tpRef][:])
        #Get the layer params
        lpRef = self.dat_['net']['layers']['block'][lNum][0]
        lParam = self.dat_['#refs#'][lpRef]
        assert (lType[0:5] == 'dagnn')
        lType = lType[6:]

        if lType == 'Conv':
            paramW = {'name': pmNames[0]}
            paramB = {'name': pmNames[1]}
            pDupKey = mpu.make_key('param', ['param'])
            lDef = mpu.get_layerdef_for_proto(
                'Convolution', name, ipNames[0], **{
                    'num_output': int(lParam['size'][3][0]),
                    'param': paramW,
                    pDupKey: paramB,
                    'kernel_size': int(lParam['size'][0][0]),
                    'stride': int(lParam['stride'][0][0]),
                    'pad': int(lParam['pad'][0][0])
                })

        elif lType == 'ReLU':
            lDef = mpu.get_layerdef_for_proto(lType, name, ipNames[0],
                                              **{'top': opNames[0]})

        elif lType == 'Pooling':
            poolType = lParam['method'][0]
            if poolType == 'max':
                poolType = 'MAX'
            elif poolType == 'avg':
                poolType = 'AVE'
            lDef = mpu.get_layerdef_for_proto(
                lType, name, ipNames[0], **{
                    'top': opNames[0],
                    'kernel_size': int(lParam['poolSize'][0][0]),
                    'stride': int(lParam['stride'][0][0]),
                    'pad': int(lParam['pad'][0][0]),
                    'pool': poolType
                })

        elif lType == 'LRN':
            N, kappa, alpha, beta = lParam['param'][0][0], lParam['param'][1][0],\
                        lParam['param'][2][0], lParam['param'][3][0]
            lDef = mpu.get_layerdef_for_proto(
                lType, name, ipNames[0], **{
                    'top': opNames[0],
                    'local_size': int(N),
                    'alpha': N * alpha,
                    'beta': beta,
                    'k': kappa
                })

        elif lType == 'Concat':
            lDef = mpu.get_layerdef_for_proto(
                lType, name, ipNames[0], **{
                    'bottom2': ipNames[1:],
                    'concat_dim': 1,
                    'top': opNames[0]
                })

        elif lType == 'Loss':
            lossType = ou.ints_to_str(lParam['loss'])
            if lossType == 'pdist':
                p = lParam['p'][0][0]
                if p == 2:
                    lossName = 'EuclideanLoss'
                else:
                    raise Exception('Loss type %s not recognized' % lossType)
            else:
                raise Exception('Loss type %s not recognized' % lossType)
            lDef = mpu.get_layerdef_for_proto(lossName, name, ipNames[0],
                                              **{'bottom2': ipNames[1]})

        elif lType == 'gaussRender':
            lDef = mpu.get_layerdef_for_proto(
                lType, name, ipNames[0], **{
                    'top': opNames[0],
                    'K': lParam['K'][0][0],
                    'T': lParam['T'][0][0],
                    'sigma': lParam['sigma'][0][0],
                    'imgSz': int(lParam['img_size'][0][0])
                })

        else:
            raise Exception('Layer Type %s not recognized, %d' % (lType, lNum))
        return lDef
	def make_caffe_layer(self, lNum):
		#Get the name
		nameRef = self.dat_['net']['layers']['name'][lNum][0]
		name    = ou.ints_to_str(self.dat_['#refs#'][nameRef][:])
		#Get the inputs
		ipRef   = self.dat_['net']['layers']['inputs'][lNum][0]
		ipNames = self.ref_to_str(ipRef)
		#Get the parameter names
		pmRef   = self.dat_['net']['layers']['params'][lNum][0]
		pmNames = self.ref_to_str(pmRef) 
		#Get the output names
		opRef   = self.dat_['net']['layers']['outputs'][lNum][0]
		opNames = self.ref_to_str(opRef) 
		#Get the layer type
		tpRef   = self.dat_['net']['layers']['type'][lNum][0]
		lType   = ou.ints_to_str(self.dat_['#refs#'][tpRef][:])
		#Get the layer params
		lpRef   = self.dat_['net']['layers']['block'][lNum][0]
		lParam  = self.dat_['#refs#'][lpRef]
		assert (lType[0:5] == 'dagnn')
		lType   = lType[6:]
	
		if lType == 'Conv':
			paramW  = {'name': pmNames[0]}
			paramB  = {'name': pmNames[1]}
			pDupKey = mpu.make_key('param', ['param'])
			lDef = mpu.get_layerdef_for_proto('Convolution', name, ipNames[0], 
							**{'num_output': int(lParam['size'][3][0]),
							  'param': paramW, pDupKey: paramB,
								'kernel_size': int(lParam['size'][0][0]), 
								'stride': int(lParam['stride'][0][0]),
								'pad': int(lParam['pad'][0][0])})				
	
		elif lType == 'ReLU':
			lDef = mpu.get_layerdef_for_proto(lType, name, ipNames[0],
							**{'top': opNames[0]})
	
		elif lType == 'Pooling':
			poolType = lParam['method'][0]
			if poolType == 'max':
				poolType = 'MAX'
			elif poolType == 'avg':
				poolType = 'AVE' 
			lDef     = mpu.get_layerdef_for_proto(lType, name, ipNames[0], 
							**{'top': opNames[0], 'kernel_size': int(lParam['poolSize'][0][0]),
								 'stride': int(lParam['stride'][0][0]), 'pad': int(lParam['pad'][0][0]),
									'pool': poolType})
	
		elif lType == 'LRN':
			N, kappa, alpha, beta = lParam['param'][0][0], lParam['param'][1][0],\
															lParam['param'][2][0], lParam['param'][3][0]
			lDef = mpu.get_layerdef_for_proto(lType, name, ipNames[0], 
							**{'top': opNames[0],
								 'local_size': int(N), 
								 'alpha': N * alpha,
								 'beta' : beta,
								 'k'    : kappa})
	
		elif lType == 'Concat':
			lDef = mpu.get_layerdef_for_proto(lType, name, ipNames[0],
							**{'bottom2': ipNames[1:],
								 'concat_dim': 1, 
								 'top': opNames[0]}) 
	
		elif lType == 'Loss':
			lossType = ou.ints_to_str(lParam['loss'])
			if lossType == 'pdist':
				p = lParam['p'][0][0]
				if p == 2:
					lossName = 'EuclideanLoss'
				else:
					raise Exception('Loss type %s not recognized' % lossType)		
			else:
				raise Exception('Loss type %s not recognized' % lossType)		
			lDef = mpu.get_layerdef_for_proto(lossName, name, ipNames[0],
							**{'bottom2': ipNames[1]})
	
		elif lType == 'gaussRender':
			lDef = mpu.get_layerdef_for_proto(lType, name, ipNames[0], 
				**{'top': opNames[0], 
					 'K': lParam['K'][0][0], 'T': lParam['T'][0][0], 
					 'sigma': lParam['sigma'][0][0], 'imgSz': int(lParam['img_size'][0][0])})
						
		else:
			raise Exception('Layer Type %s not recognized, %d' % (lType, lNum))
		return lDef