我们从Python开源项目中,提取了以下10个代码示例,用于说明如何使用caffe.proto.caffe_pb2.BlobProto()。
def save_mean(mean, filename): """ Saves mean to file Arguments: mean -- the mean as an np.ndarray filename -- the location to save the image """ if filename.endswith('.binaryproto'): blob = caffe_pb2.BlobProto() blob.num = 1 blob.channels = mean.shape[0] blob.height = mean.shape[1] blob.width = mean.shape[2] blob.data.extend(mean.astype(float).flat) with open(filename, 'wb') as outfile: outfile.write(blob.SerializeToString()) elif filename.endswith(('.jpg', '.jpeg', '.png')): save_image(mean, filename) else: raise ValueError('unrecognized file extension')
def load_mean_file(mean_file): if mean_file.endswith('.npy'): return np.load(mean_file) with open(mean_file, 'rb') as infile: blob = caffe_pb2.BlobProto() blob.MergeFromString(infile.read()) if blob.HasField('shape'): blob_dims = blob.shape assert len(blob_dims) == 4, 'Shape should have 4 dimensions - shape is "%s"' % blob.shape elif blob.HasField('num') and blob.HasField('channels') and \ blob.HasField('height') and blob.HasField('width'): blob_dims = (blob.num, blob.channels, blob.height, blob.width) else: raise ValueError('blob does not provide shape or 4d dimensions') #pixel = np.reshape(blob.data, blob_dims[1:]).mean(1).mean(1) #print pixel.shape #t.set_mean('data', pixel) mean=np.reshape(blob.data, blob_dims[1:]) #mean=mean[:,(256-224)//2:(256-224)//2+224,(256-224)//2:(256-224)//2+224] return mean
def _load_binaryproto(file): blob = caffe_pb2.BlobProto() data = open(file, 'rb').read() blob.ParseFromString(data) arr = np.array(caffe.io.blobproto_to_array(blob)) return arr[0]
def load_mean_bgr(): """ bgr mean pixel value image, [0, 255]. [height, width, 3] """ with open("data/ResNet_mean.binaryproto", mode='rb') as f: data = f.read() blob = caffe_pb2.BlobProto() blob.ParseFromString(data) mean_bgr = caffe.io.blobproto_to_array(blob)[0] assert mean_bgr.shape == (3, 224, 224) return mean_bgr.transpose((1, 2, 0))
def setup(self): mean_file = os.path.join(self.model_dir, 'mean.binaryproto') labels_file = os.path.join(self.model_dir, 'labels.txt') self.transformer = caffe.io.Transformer({'data': self.net.blobs['data'].data.shape}) self.transformer.set_transpose('data', (2, 0, 1)) self.transformer.set_raw_scale('data', 255) self.transformer.set_channel_swap('data', (2, 1, 0)) # set mean pixel with open(mean_file, 'rb') as infile: blob = caffe_pb2.BlobProto() blob.MergeFromString(infile.read()) if blob.HasField('shape'): blob_dims = blob.shape assert len(blob_dims) == 4, 'Shape should have 4 dimensions - shape is %s' % blob.shape elif blob.HasField('num') and blob.HasField('channels') and \ blob.HasField('height') and blob.HasField('width'): blob_dims = (blob.num, blob.channels, blob.height, blob.width) else: raise ValueError('blob does not provide shape or 4d dimensions') pixel = np.reshape(blob.data, blob_dims[1:]).mean(1).mean(1) self.transformer.set_mean('data', pixel) # This is overkill here, since we only have 2 labels, but here's how we might read them. # Later we'd grab the label we want based on position (e.g., 0=dolphin, 1=seahorse) self.labels = np.loadtxt(labels_file, str, delimiter='\n')
def get_transformer(deploy_file, mean_file=None): """ Returns an instance of caffe.io.Transformer Arguments: deploy_file -- path to a .prototxt file Keyword arguments: mean_file -- path to a .binaryproto file (optional) """ network = caffe_pb2.NetParameter() with open(deploy_file) as infile: text_format.Merge(infile.read(), network) if network.input_shape: dims = network.input_shape[0].dim else: dims = network.input_dim[:4] #dims = network.input_dim t = caffe.io.Transformer( inputs = {'data': dims} ) t.set_transpose('data', (2,0,1)) # transpose to (channels, height, width) # color images if dims[1] == 3: # channel swap t.set_channel_swap('data', (2,1,0)) if mean_file: # set mean pixel with open(mean_file) as infile: blob = caffe_pb2.BlobProto() blob.MergeFromString(infile.read()) if blob.HasField('shape'): blob_dims = blob.shape assert len(blob_dims) == 4, 'Shape should have 4 dimensions - shape is "%s"' % blob.shape elif blob.HasField('num') and blob.HasField('channels') and \ blob.HasField('height') and blob.HasField('width'): blob_dims = (blob.num, blob.channels, blob.height, blob.width) else: raise ValueError('blob does not provide shape or 4d dimensions') pixel = np.reshape(blob.data, blob_dims[1:]).mean(1).mean(1) t.set_mean('data', pixel) return t # Load image to caffe
def get_transformer(deploy_file, mean_file=None): """ Returns an instance of caffe.io.Transformer Arguments: deploy_file -- path to a .prototxt file Keyword arguments: mean_file -- path to a .binaryproto file (optional) """ network = caffe_pb2.NetParameter() with open(deploy_file) as infile: text_format.Merge(infile.read(), network) if network.input_shape: dims = network.input_shape[0].dim else: dims = network.input_dim[:4] t = caffe.io.Transformer( inputs = {'data': dims} ) t.set_transpose('data', (2,0,1)) # transpose to (channels, height, width) # color images if dims[1] == 3: # channel swap t.set_channel_swap('data', (2,1,0)) if mean_file: # set mean pixel with open(mean_file,'rb') as infile: blob = caffe_pb2.BlobProto() blob.MergeFromString(infile.read()) if blob.HasField('shape'): blob_dims = blob.shape assert len(blob_dims) == 4, 'Shape should have 4 dimensions - shape is "%s"' % blob.shape elif blob.HasField('num') and blob.HasField('channels') and \ blob.HasField('height') and blob.HasField('width'): blob_dims = (blob.num, blob.channels, blob.height, blob.width) else: raise ValueError('blob does not provide shape or 4d dimensions') pixel = np.reshape(blob.data, blob_dims[1:]).mean(1).mean(1) t.set_mean('data', pixel) return t