def __init__(self, params, num_gpu): super(LMDBDataUnit, self).__init__(params, num_gpu) if params.include[0].phase == Phase.Value('TRAIN'): self.dp = LMDBDataProvider(params.data_param, params.transform_param, num_gpu) else: self.dp = LMDBDataProvider(params.data_param, params.transform_param, 1) self.params = params self.crop_size = params.transform_param.crop_size self.generator = None
class LMDBDataUnit(DataUnit): ''' DataUnit load from LMDB. :ivar caffe.LayerParameter params: lmdb data layer param defined by Caffe, params.data_param contains information about data source, parmas.transform_param mainly defines data augmentation operations ''' def __init__(self, params, num_gpu): super(LMDBDataUnit, self).__init__(params, num_gpu) if params.include[0].phase == Phase.Value('TRAIN'): self.dp = LMDBDataProvider(params.data_param, params.transform_param, num_gpu) else: self.dp = LMDBDataProvider(params.data_param, params.transform_param, 1) self.params = params self.crop_size = params.transform_param.crop_size self.generator = None def compute_size(self, from_btm, to_top): self.out_shape = [ self.params.transform_param.crop_size, self.params.transform_param.crop_size, 3, 1 ] to_top[self.top_names[0]] = self.out_shape[:] def forward(self, from_btm, to_top, phase): ''' Feed-forward operation may vary according to phase. .. note:: LMDB data provider now support multi-view testing, if phase is "MULTI_VIEW", it will produce concequtive 10 batches of different views of the same original image ''' if self.generator == None: if phase == 'TRAIN' or phase == 'TEST': self.generator = self.dp.get_mb(phase) #multiview test else: self.generator = self.dp.get_multiview_mb() while True: try: (samples, labels) = next(self.generator) if len(labels) == 0: (samples, labels) = next(self.generator) except StopIteration: print 'Have scanned the whole dataset; start from the begginning agin' self.generator = self.dp.get_mb(phase) continue break to_top[self.top_names[0]] = owl.from_numpy(samples).reshape( [self.crop_size, self.crop_size, 3, samples.shape[0]]) for i in range(1, len(self.top_names)): to_top[self.top_names[i]] = labels[:, i - 1] def __str__(self): return 'lmdb_data'
class LMDBDataUnit(DataUnit): ''' DataUnit load from LMDB. :ivar caffe.LayerParameter params: lmdb data layer param defined by Caffe, params.data_param contains information about data source, parmas.transform_param mainly defines data augmentation operations ''' def __init__(self, params, num_gpu): super(LMDBDataUnit, self).__init__(params, num_gpu) if params.include[0].phase == Phase.Value('TRAIN'): self.dp = LMDBDataProvider(params.data_param, params.transform_param, num_gpu) else: self.dp = LMDBDataProvider(params.data_param, params.transform_param, 1) self.params = params self.crop_size = params.transform_param.crop_size self.generator = None def compute_size(self, from_btm, to_top): self.out_shape = [self.params.transform_param.crop_size, self.params.transform_param.crop_size, 3, 1] to_top[self.top_names[0]] = self.out_shape[:] def forward(self, from_btm, to_top, phase): ''' Feed-forward operation may vary according to phase. .. note:: LMDB data provider now support multi-view testing, if phase is "MULTI_VIEW", it will produce concequtive 10 batches of different views of the same original image ''' if self.generator == None: if phase == 'TRAIN' or phase == 'TEST': self.generator = self.dp.get_mb(phase) #multiview test else: self.generator = self.dp.get_multiview_mb() while True: try: (samples, labels) = next(self.generator) if len(labels) == 0: (samples, labels) = next(self.generator) except StopIteration: print 'Have scanned the whole dataset; start from the begginning agin' self.generator = self.dp.get_mb(phase) continue break to_top[self.top_names[0]] = owl.from_numpy(samples).reshape( [self.crop_size, self.crop_size, 3, samples.shape[0]]) for i in range (1, len(self.top_names)): to_top[self.top_names[i]] = labels[:,i - 1] def __str__(self): return 'lmdb_data'
class LMDBDataUnit(DataUnit): def __init__(self, params, num_gpu): super(LMDBDataUnit, self).__init__(params, num_gpu) if params.include[0].phase == Phase.Value('TRAIN'): self.dp = LMDBDataProvider(params.data_param, params.transform_param, num_gpu) else: self.dp = LMDBDataProvider(params.data_param, params.transform_param, 1) self.params = params self.crop_size = params.transform_param.crop_size self.generator = None def init_layer_size(self, from_btm, to_top): self.out_shape = [self.params.transform_param.crop_size, self.params.transform_param.crop_size, 3, 1] to_top[self.top_names[0]] = self.out_shape[:] def forward(self, from_btm, to_top, phase): if self.generator == None: if phase == 'TRAIN' or phase == 'TEST': self.generator = self.dp.get_mb(phase) #multiview test else: self.generator = self.dp.get_multiview_mb() while True: try: (samples, labels) = next(self.generator) if len(labels) == 0: (samples, labels) = next(self.generator) except StopIteration: print 'Have scanned the whole dataset; start from the begginning agin' self.generator = self.dp.get_mb(phase) continue break to_top[self.top_names[0]] = owl.from_numpy(samples).reshape( [self.crop_size, self.crop_size, 3, samples.shape[0]]) for i in range (1, len(self.top_names)): to_top[self.top_names[i]] = labels[:,i - 1] def __str__(self): return 'lmdb_data'
class LMDBDataUnit(DataUnit): ''' DataUnit load from LMDB. :ivar caffe.LayerParameter params: lmdb data layer param defined by Caffe, params.data_param contains information about data source, parmas.transform_param mainly defines data augmentation operations ''' def __init__(self, params, num_gpu): super(LMDBDataUnit, self).__init__(params, num_gpu) if params.include[0].phase == Phase.Value('TRAIN'): self.dp = LMDBDataProvider(params.data_param, params.transform_param, num_gpu) else: self.dp = LMDBDataProvider(params.data_param, params.transform_param, 1) self.params = params self.crop_size = params.transform_param.crop_size self.generator = None self.out = None self.multiview = False def compute_size(self, from_btm, to_top): self.out_shape = [self.params.transform_param.crop_size, self.params.transform_param.crop_size, 3, 1] to_top[self.top_names[0]] = dict() to_top[self.top_names[0]]['out_shape'] = self.out_shape[:] to_top[self.top_names[0]]['rec_on_ori'] = 1 to_top[self.top_names[0]]['stride_on_ori'] = 1 to_top[self.top_names[0]]['start_on_ori'] = 0 self.rec_on_ori = 1 self.stride_on_ori = 1 self.start_on_ori = 0 def forward(self, from_btm, to_top, phase): ''' Feed-forward operation may vary according to phase. .. note:: LMDB data provider now support multi-view testing, if multiview == True, it will produce concequtive 10 batches of different views of the same original image ''' if self.generator == None: if self.multiview == False: self.generator = self.dp.get_mb(phase) #multiview test else: self.generator = self.dp.get_multiview_mb() while True: try: (samples, labels) = next(self.generator) if len(labels) == 0: (samples, labels) = next(self.generator) except StopIteration: print 'Have scanned the whole dataset; start from the begginning agin' if self.multiview == False: self.generator = self.dp.get_mb(phase) #multiview test else: self.generator = self.dp.get_multiview_mb() continue break #TODO(Jesse Lovitt): Change this 256 to a division by 256/max-fixed-point-value to_top[self.top_names[0]] = owl.from_numpy(np.divide(samples,256)).reshape( [self.crop_size, self.crop_size, 3, samples.shape[0]]) for i in range (1, len(self.top_names)): to_top[self.top_names[i]] = labels[:,i - 1] #to_top[self.top_names[0]] = owl.zeros([self.crop_size, self.crop_size, 3, 256]) #for i in range (1, len(self.top_names)): #to_top[self.top_names[i]] = np.ones(256) self.out = to_top[self.top_names[0]] def __str__(self): return 'lmdb_data'