Ejemplo n.º 1
0
 def TranslateModel(
     cls,
     caffe_net,
     pretrained_net,
     is_test=False,
     net_state=None,
     remove_legacy_pad=False,
     input_dims=None
 ):
     net_state = caffe_pb2.NetState() if net_state is None else net_state
     net = caffe2_pb2.NetDef()
     net.name = caffe_net.name
     net_params = caffe2_pb2.TensorProtos()
     if len(caffe_net.layers) > 0:
         raise ValueError(
             'I think something is wrong. This translation script '
             'only accepts new style layers that are stored in the '
             'layer field.'
         )
     if not input_dims:
         input_dims = _GetInputDims(caffe_net)
     for layer in caffe_net.layer:
         if not _ShouldInclude(net_state, layer):
             log.info('Current net state does not need layer {}'
                         .format(layer.name))
             continue
         log.info('Translate layer {}'.format(layer.name))
         # Get pretrained one
         pretrained_layers = (
             [l for l in pretrained_net.layer
              if l.name == layer.name] + [l
                                          for l in pretrained_net.layers
                                          if l.name == layer.name]
         )
         if len(pretrained_layers) > 1:
             raise ValueError(
                 'huh? more than one pretrained layer of one name?')
         elif len(pretrained_layers) == 1:
             pretrained_blobs = [
                 utils.CaffeBlobToNumpyArray(blob)
                 for blob in pretrained_layers[0].blobs
             ]
         else:
             # No pretrained layer for the given layer name. We'll just pass
             # no parameter blobs.
             # print 'No pretrained layer for layer', layer.name
             pretrained_blobs = []
         operators, params = cls.TranslateLayer(
             layer, pretrained_blobs, is_test, net=net,
             net_params=net_params, input_dims=input_dims)
         net.op.extend(operators)
         net_params.protos.extend(params)
     if remove_legacy_pad:
         assert input_dims, \
                'Please specify input_dims to remove legacy_pad'
         net = _RemoveLegacyPad(net, net_params, input_dims)
     return net, net_params
Ejemplo n.º 2
0
    def _create_test_tensor_protos(self, idx):
        item = caffe2_pb2.TensorProtos()
        data = item.protos.add()
        data.data_type = core.DataType.STRING
        data.string_data.append("foo{}".format(idx).encode('utf-8'))
        label = item.protos.add()
        label.data_type = core.DataType.INT32
        label.int32_data.append(1)

        return item.SerializeToString()
def decode_msg(databuf):
    if databuf  is None :
        return None
    tensor_protos = caffe2_pb2.TensorProtos()
    tensor_protos.ParseFromString(databuf)
    img_proto=tensor_protos.protos[0]
    imgbuf=img_proto.string_data[0]
    dataArray = np.frombuffer(imgbuf, np.uint8)
    
    dataArray=dataArray.reshape(img_proto.dims)
    return dataArray
def write_lmdb(labels_file_path, lmdb_path):
    invalid = []
    valid = []
    labels_handler = open(labels_file_path, "r")
    # Write to lmdb
    print(">>> Write database...")
    LMDB_MAP_SIZE = 1 << 40
    print("LMDB_MAP_SIZE", LMDB_MAP_SIZE)
    env = lmdb.open(lmdb_path, map_size=LMDB_MAP_SIZE)

    with env.begin(write=True) as txn:
        count = 0
        for line in labels_handler.readlines():
            line = line.rstrip()
            clip_path = line.split()[0]
            clip_label = int(line.split()[1])

            # read in image (as multichannel pose motion representation)
            # print(clip_path)
            potion_data = PoTion(clip_path, img_size=(height, width), ch=col_ch, sigma=sigma, scale=resize_scale)

            if potion_data is not None:
                count = count + 1
                valid.append(line)
                # Create TensorProtos
                tensor_protos = caffe2_pb2.TensorProtos()
                potion_tensor = tensor_protos.protos.add()
                potion_tensor.dims.extend(potion_data.shape)
                potion_tensor.data_type = 1
                flatten_potion = potion_data.reshape(np.prod(potion_data.shape))
                potion_tensor.float_data.extend(flatten_potion)
                label_tensor = tensor_protos.protos.add()
                label_tensor.data_type = 2
                label_tensor.int32_data.append(clip_label)
                fileId_tensor = tensor_protos.protos.add()
                fileId_tensor.data_type=2
                fileId_tensor.int32_data.append(count)

                txn.put(
                    '{}'.format(count).encode('ascii'),
                    tensor_protos.SerializeToString()
                )
                if ((count % 1000 == 0)):
                    print("Inserted {} rows".format(count))
            else:
                # print('data was invalid, is removed')
                invalid.append(line)

    print("Inserted {} rows".format(count))
    print("\nLMDB saved at " + lmdb_path + "\n\n")
    labels_handler.close()
    return invalid, valid
Ejemplo n.º 5
0
def write_db(db_type, db_name, features, labels):
    db = core.C.create_db(db_type, db_name, core.C.Mode.write)
    transaction = db.new_transaction()
    for i in range(features.shape[0]):
        feature_and_label = caffe2_pb2.TensorProtos()
        feature_and_label.protos.extend([
            utils.NumpyArrayToCaffe2Tensor(features[i]),
            utils.NumpyArrayToCaffe2Tensor(labels[i])
        ])
        transaction.put('train_%03d'.format(i),
                        feature_and_label.SerializeToString())
    # Close the transaction, and then close the db.
    del transaction
    del db
Ejemplo n.º 6
0
def make_datum(img_data, label):
    # Create TensorProtos
    tensor_protos = caffe2_pb2.TensorProtos()
    img_tensor = tensor_protos.protos.add()
    img_tensor.dims.extend(img_data.shape)
    img_tensor.data_type = 1

    flatten_img = img_data.reshape(np.prod(img_data.shape))
    img_tensor.float_data.extend(flatten_img)

    label_tensor = tensor_protos.protos.add()
    label_tensor.data_type = 2
    label_tensor.int32_data.append(label)

    return tensor_protos
Ejemplo n.º 7
0
def write_db(db_type, db_name, data_lst):
    ''' The minidb datebase seems immutable.
	'''
    db = core.C.create_db(db_type, db_name, core.C.Mode.write)
    transaction = db.new_transaction()
    for i in range(data_lst[0].shape[0]):
        tensor = caffe2_pb2.TensorProtos()
        temp_lst = []
        for data in data_lst:
            temp_lst.append(utils.NumpyArrayToCaffe2Tensor(data[i]))
        tensor.protos.extend(temp_lst)
        transaction.put(str(i), tensor.SerializeToString())
    del transaction
    del db
    return db_name
Ejemplo n.º 8
0
def insert_db(db_name, data, labels):
    db_type = db_name.split(".")[-1]
    db = core.C.create_db(db_type, db_name, core.C.Mode.write)
    transaction = db.new_transaction()
    for i in range(data.shape[0]):
        data_and_label = caffe2_pb2.TensorProtos()
        data_and_label.protos.extend([
            utils.NumpyArrayToCaffe2Tensor(data[i]),
            utils.NumpyArrayToCaffe2Tensor(labels[i])
        ])
        transaction.put('data_%03d'.format(i),
                        data_and_label.SerializeToString())
    # Close the transaction, and then close the db.
    del transaction
    del db
Ejemplo n.º 9
0
def write_lmdb(labels_file_path, lmdb_path):
    with open(labels_file_path, "r") as labels_handler:
        print(">>> Write database...")
        LMDB_MAP_SIZE = 1 << 40  # ????
        print("LMDB_MAP_SIZE", LMDB_MAP_SIZE)

        env = lmdb.open(lmdb_path, map_size=LMDB_MAP_SIZE)

        with env.begin(write=True) as txn:
            count = 0
            for line in labels_handler.readlines():
                line = line.rstrip()
                im_path = line.split()[0]
                im_label = int(line.split()[1])

                # read in image (as RGB)
                img_data = imread(im_path).astype(np.float32)

                # convert to BGR
                img_data = img_data[:, :, (2, 1, 0)]
                img_data = img_data / 256.0

                # HWC -> CHW (N gets added in AddInput function)
                img_data = np.transpose(img_data, (2, 0, 1))

                # Create TensorProtos
                tensor_protos = caffe2_pb2.TensorProtos()

                img_tensor = tensor_protos.protos.add()
                img_tensor.dims.extend(img_data.shape)
                img_tensor.data_type = 1
                flatten_img = img_data.reshape(np.prod(img_data.shape))
                img_tensor.float_data.extend(flatten_img)

                label_tensor = tensor_protos.protos.add()
                label_tensor.data_type = 2
                label_tensor.int32_data.append(im_label)

                # write to db
                txn.put(
                    "{}".format(count).encode("ascii"),  # key
                    tensor_protos.SerializeToString()  # value
                )
                if count % 1000 == 0:
                    print("Inserted {} rows".format(count))
                count = count + 1
        print("Inserted {} rows".format(count))
        print("\nLMDB saved at " + lmdb_path)
def encode_msg(msg):
    if msg  is None :
        return None
    # Create TensorProtos
    msg = msg.astype( np.uint8)
    tensor_protos = caffe2_pb2.TensorProtos()
    img_tensor = tensor_protos.protos.add()
    img_tensor.dims.extend(msg.shape)
    img_tensor.data_type = 4
    img_tensor.name = str(msg.shape)
    flatten_img = msg.reshape(np.prod(msg.shape))
    img_tensor.name = str(msg.shape)+"----"+str(flatten_img.shape)

    img_tensor.string_data.append(flatten_img.tostring())
    
    return tensor_protos.SerializeToString()
    def create_video_db(self, list_file, output_file, use_list=False):
        # Write to lmdb database...
        LMDB_MAP_SIZE = 1 << 40  # MODIFY
        env = lmdb.open(output_file, map_size=LMDB_MAP_SIZE)
        total_size = 0

        file_name = []
        start_frame = []
        label = []
        index = 0

        with env.begin(write=True) as txn:
            with open(list_file, "r") as data:
                for line in data:
                    p = line.split()
                    file_name = p[0]
                    start_frame = int(p[1])
                    label = int(p[2])

                    if not use_list:
                        with open(file_name, mode="rb") as file:
                            video_data = file.read()
                    else:
                        video_data = file_name

                    tensor_protos = caffe2_pb2.TensorProtos()
                    video_tensor = tensor_protos.protos.add()
                    video_tensor.data_type = 4  # string data
                    video_tensor.string_data.append(video_data)

                    label_tensor = tensor_protos.protos.add()
                    label_tensor.data_type = 2
                    label_tensor.int32_data.append(label)

                    start_frame_tensor = tensor_protos.protos.add()
                    start_frame_tensor.data_type = 2
                    start_frame_tensor.int32_data.append(start_frame)

                    txn.put(
                        "{}".format(index).encode("ascii"),
                        tensor_protos.SerializeToString(),
                    )
                    index = index + 1
                    total_size = total_size + len(video_data) + sys.getsizeof(
                        int)
        return total_size
Ejemplo n.º 12
0
def make_lmdb(data, labels, output_file, data_shape=None):
    print(">>> write database...")

    LMDB_MAP_SIZE = 3 * (1 << 30)
    env = lmdb.open(output_file, LMDB_MAP_SIZE)
    dt_shape = None

    if type(data) is np.array:
        dt_shape = data.shape
    elif data_shape is None:
        logging.error("data_shape is required,exit!")
        return
    else:
        dt_shape = data_shape
    with env.begin(write=True) as txn:

        if len(data) != len(labels):
            logging.error("data and labels do not match")
            raise Exception("mismatched data and labels")

        try:
            for index in xrange(len(data)):
                image_protos = caffe2_pb2.TensorProtos()

                image_proto = image_protos.protos.add()
                image_proto.data_type = caffe2_pb2.TensorProto.FLOAT
                image_proto.dims.extend(dt_shape)
                dt = None
                if type(data) is np.array:
                    dt = data[index].reshape(np.prod(dt_shape))
                else:
                    dt = data[index]
                image_proto.float_data.extend(dt)

                label_proto = image_protos.protos.add()
                label_proto.data_type = caffe2_pb2.TensorProto.INT32
                label_proto.int32_data.append(labels[index])

                txn.put('{}'.format(index).encode("ascii"),
                        image_protos.SerializeToString())
                if index % 16 == 0:
                    logging.info('Inserted {} rows'.format(index))
        except Exception as _e:
            logging.error("excetion traceback: %s", traceback.format_exc())
            return
Ejemplo n.º 13
0
def write_db(db_type, db_name, input_file):
    db = core.C.create_db(db_type, db_name, core.C.Mode.write)
    transaction = db.new_transaction()
    with open(input_file,'r') as f:
    	data_paths = f.readlines()
    for j in range(len(data_paths)):
    	img_path = data_paths[j].split(' ')[0]
    	print(j,img_path)
        label = np.array(int(data_paths[j].split(' ')[1][0]))
        img = skimage.img_as_float(skimage.io.imread(img_path))
        img = skimage.transform.resize(img,(224,224))
        img = img[:,:,(2,1,0)]
        img_data = img.transpose(2,0,1)
        feature_and_label = caffe2_pb2.TensorProtos()
        feature_and_label.protos.extend([utils.NumpyArrayToCaffe2Tensor(img_data), utils.NumpyArrayToCaffe2Tensor(label)])
        transaction.put('train_%04d'.format(j),feature_and_label.SerializeToString())
    del transaction
    del db
Ejemplo n.º 14
0
 def TranslateModel(
     cls,
     caffe_net,
     pretrained_net,
     net_state=caffe_pb2.NetState()
 ):
     net = caffe2_pb2.NetDef()
     net.name = caffe_net.name
     net_params = caffe2_pb2.TensorProtos()
     if len(caffe_net.layer) == 0:
         raise ValueError(
             'I think something is wrong. This translation script '
             'only accepts new style layers that are stored in the '
             'layer field.'
         )
     for layer in caffe_net.layer:
         if not _ShouldInclude(net_state, layer):
             print 'Current net state does not need layer', layer.name
             continue
         print 'Translate layer', layer.name
         # Get pretrained one
         pretrained_layers = (
             [l for l in pretrained_net.layer
              if l.name == layer.name] + [l
                                          for l in pretrained_net.layers
                                          if l.name == layer.name]
         )
         if len(pretrained_layers) > 1:
             raise ValueError(
                 'huh? more than one pretrained layer of one name?')
         elif len(pretrained_layers) == 1:
             pretrained_blobs = [
                 utils.CaffeBlobToNumpyArray(blob)
                 for blob in pretrained_layers[0].blobs
             ]
         else:
             # No pretrained layer for the given layer name. We'll just pass
             # no parameter blobs.
             # print 'No pretrained layer for layer', layer.name
             pretrained_blobs = []
         operators, params = cls.TranslateLayer(layer, pretrained_blobs)
         net.op.extend(operators)
         net_params.protos.extend(params)
     return net, net_params
 def insert_image_to_lmdb(img_data, label, index):
     # Create TensorProtos
     tensor_protos = caffe2_pb2.TensorProtos()
     img_tensor = tensor_protos.protos.add()
     img_tensor.dims.extend(img_data.shape)
     img_tensor.data_type = 1
     flatten_img = img_data.reshape(np.prod(img_data.shape))
     img_tensor.float_data.extend(flatten_img)
     label_tensor = tensor_protos.protos.add()
     label_tensor.data_type = 2
     label_tensor.int32_data.append(label)
     txn.put(
         '{}'.format(index).encode('ascii'),
         tensor_protos.SerializeToString()
     )
     if ((index % 100 == 0)):
         print("Inserted {} rows".format(index))
     index = index + 1
     return index
Ejemplo n.º 16
0
def write_caffe_db(db_type, db_name, folder, filetype):
    db = core.C.create_db(db_type, db_name, core.C.Mode.write)
    transaction = db.new_transaction()
                
    i = 0
    filename = folder + '/*.' + filetype
    for filename in glob.glob(filename): #assuming gif
        im = skimage.img_as_float(skimage.io.imread(filename)).astype(np.float32)
        img256 = skimage.transform.resize(img, w_size, y_size))
        img256 = img256.swapaxes(1, 2).swapaxes(0, 1)
        img256 = img256[(2, 1, 0), :, :]
        lab = np.array(0, dtype = "int64")
        feature_and_label = caffe2_pb2.TensorProtos()
        feature_and_label.protos.extend([
            utils.NumpyArrayToCaffe2Tensor(img256),
            utils.NumpyArrayToCaffe2Tensor(lab)
            ])
        transaction.put(
                'train_%03d'.format(i),
                feature_and_label.SerializeToString())
        i += 1
def create_db(output_file):
    print(">>> Write database...")
    LMDB_MAP_SIZE = 1 << 40  # MODIFY
    env = lmdb.open(output_file, map_size=LMDB_MAP_SIZE)

    checksum = 0
    with env.begin(write=True) as txn:
        for j in range(0, 128):
            # MODIFY: add your own data reader / creator
            label = j % 10
            width = 64
            height = 32

            img_data = np.random.rand(3, width, height)
            # ...

            # Create TensorProtos
            tensor_protos = caffe2_pb2.TensorProtos()
            img_tensor = tensor_protos.protos.add()
            img_tensor.dims.extend(img_data.shape)
            img_tensor.data_type = 1

            flatten_img = img_data.reshape(np.prod(img_data.shape))
            img_tensor.float_data.extend(flatten_img)

            label_tensor = tensor_protos.protos.add()
            label_tensor.data_type = 2
            label_tensor.int32_data.append(label)
            txn.put('{}'.format(j).encode('ascii'),
                    tensor_protos.SerializeToString())

            checksum += np.sum(img_data) * label
            if (j % 16 == 0):
                print("Inserted {} rows".format(j))

    print("Checksum/write: {}".format(int(checksum)))
    return checksum
Ejemplo n.º 18
0
def create_test(output_dir, width, height, default_bound, minsize, crop, means,
                stds, count, label_type, num_labels, output1=None,
                output2_size=None):
    print("Creating a temporary lmdb database of %d pictures..." % (count))

    if default_bound is None:
        default_bound = [-1] * 4

    LMDB_MAP_SIZE = 1 << 40
    env = lmdb.open(output_dir, map_size=LMDB_MAP_SIZE, subdir=True)
    index = 0
    # Create images and the expected results
    expected_results = []
    with env.begin(write=True) as txn:
        while index < count:
            img_array = np.random.random_integers(
                0, 255, [height, width, 3]).astype(np.uint8)
            img_obj = Image.fromarray(img_array)
            img_str = StringIO.StringIO()
            img_obj.save(img_str, 'PNG')

            # Create a random bounding box for every other image
            # ymin, xmin, bound_height, bound_width
            # TODO: To ensure that we never need to scale, we
            # ensure that the bounding-box is larger than the
            # minsize parameter
            bounding_box = list(default_bound)
            do_default_bound = True
            if index % 2 == 0:
                if height > minsize and width > minsize:
                    do_default_bound = False
                    bounding_box[0:2] = [np.random.randint(a) for a in
                                         (height - minsize, width - minsize)]
                    bounding_box[2:4] = [np.random.randint(a) + minsize for a in
                                         (height - bounding_box[0] - minsize + 1,
                                          width - bounding_box[1] - minsize + 1)]
                    # print("Bounding box is %s" % (str(bounding_box)))
            # Create expected result
            img_expected = img_array.astype(np.float32) * (1.0 / 255.0)
            # print("Orig image: %s" % (str(caffe2_img(img_expected))))
            img_expected = verify_apply_bounding_box(
                img_expected,
                bounding_box)
            # print("Bounded image: %s" % (str(caffe2_img(img_expected))))

            img_expected = verify_rescale(img_expected, minsize)

            img_expected = verify_crop(img_expected, crop)
            # print("Crop image: %s" % (str(caffe2_img(img_expected))))

            img_expected = verify_color_normalize(img_expected, means, stds)
            # print("Color image: %s" % (str(caffe2_img(img_expected))))

            tensor_protos = caffe2_pb2.TensorProtos()
            image_tensor = tensor_protos.protos.add()
            image_tensor.data_type = 4  # string data
            image_tensor.string_data.append(img_str.getvalue())
            img_str.close()

            label_tensor = tensor_protos.protos.add()
            label_tensor.data_type = 2  # int32 data
            assert (label_type >= 0 and label_type <= 2)
            if label_type == 0:
                label_tensor.int32_data.append(index)
                expected_label = index
            elif label_type == 1:
                binary_labels = np.random.randint(2, size=num_labels)
                for idx, val in enumerate(binary_labels.tolist()):
                    if val == 1:
                        label_tensor.int32_data.append(idx)
                expected_label = binary_labels
            elif label_type == 2:
                embedding_label = np.random.randint(100, size=num_labels)
                for _idx, val in enumerate(embedding_label.tolist()):
                    label_tensor.int32_data.append(val)
                expected_label = embedding_label

            if output1:
                output1_tensor = tensor_protos.protos.add()
                output1_tensor.data_type = 1  # float data
                output1_tensor.float_data.append(output1)

            output2 = []
            if output2_size:
                output2_tensor = tensor_protos.protos.add()
                output2_tensor.data_type = 2  # int32 data
                values = np.random.randint(1024, size=output2_size)
                for val in values.tolist():
                    output2.append(val)
                    output2_tensor.int32_data.append(val)

            expected_results.append(
                [caffe2_img(img_expected), expected_label, output1, output2])

            if not do_default_bound:
                bounding_tensor = tensor_protos.protos.add()
                bounding_tensor.data_type = 2  # int32 data
                bounding_tensor.int32_data.extend(bounding_box)

            txn.put(
                '{}'.format(index).encode('ascii'),
                tensor_protos.SerializeToString()
            )
            index = index + 1
        # End while
    # End with
    return expected_results
def create_an_lmdb_database(list_file, output_file, use_local_file=True):
    print("Write video to a lmdb...")
    LMDB_MAP_SIZE = 1 << 40  # MODIFY
    env = lmdb.open(output_file, map_size=LMDB_MAP_SIZE)

    # start counters
    total_size = 0
    index = 0
    test_start_frame_num = 10
    crop_times = 6

    # initialize empty lists
    list_idx = []
    list_file_name = []
    # list_start_frame = []
    list_label_strings = []

    # read in a list and shuffle
    items = 0
    with open(list_file, 'r') as data:
        for line in data:
            tokens = line.split()
            list_file_name.append(tokens[0])
            # list_start_frame.append(int(tokens[1]))
            list_label_strings.append(tokens[1])
            list_idx.append(items)
            items = items + 1

    with env.begin(write=True) as txn:
        for i in range(items):
            if not use_local_file:
                # read raw video data and store to db
                with open(list_file_name[list_idx[i]], mode='rb') as file:
                    video_data = file.read()
            else:
                # store the full path to local video file
                video_data = list_file_name[list_idx[i]]

            if i % 1000 == 0:
                print(i)

            for ct in range(crop_times):

                for j in range(test_start_frame_num):

                    tensor_protos = caffe2_pb2.TensorProtos()
                    video_tensor = tensor_protos.protos.add()
                    video_tensor.data_type = 4  # string data
                    video_tensor.string_data.append(video_data)

                    label_tensor = tensor_protos.protos.add()
                    label_tensor.data_type = 2
                    label_string = list_label_strings[list_idx[i]]
                    labels = label_string.split(',')
                    label_tensor.int32_data.append(i)
                    # for label in labels:
                    # label_tensor.int32_data.append(int(label))

                    start_frame_tensor = tensor_protos.protos.add()
                    start_frame_tensor.data_type = 2
                    start_frame_tensor.int32_data.append(j)

                    spatial_pos_tensor = tensor_protos.protos.add()
                    spatial_pos_tensor.data_type = 2
                    spatial_pos_tensor.int32_data.append(ct)

                    txn.put('{}'.format(index).encode('ascii'),
                            tensor_protos.SerializeToString())
                    index = index + 1
                    total_size = total_size + len(video_data) + sys.getsizeof(
                        int)

    print("Done writing {} clips into database with a total size of {}".format(
        len(list_idx), total_size))
    return total_size
Ejemplo n.º 20
0
import os
import sys

# Make sure that you set this to the location your caffe2 library lies.
caffe2_root = '/home/awesomebox/code/caffe2/'
sys.path.insert(0, os.path.join(caffe2_root, 'gen'))

# After setting the caffe2 root path, we will import all the caffe2 libraries needed.
from caffe2.proto import caffe2_pb2
from pycaffe2 import core, net_drawer, workspace, visualize

# net is the network definition.
net = caffe2_pb2.NetDef()
net.ParseFromString(open('inception_net.pb').read())
# tensors contain the parameter tensors.
tensors = caffe2_pb2.TensorProtos()
tensors.ParseFromString(open('inception_tensors.pb').read())

DEVICE_OPTION = caffe2_pb2.DeviceOption()
# Let's use CPU in our example.
DEVICE_OPTION.device_type = caffe2_pb2.CPU

# If you have a GPU and want to run things there, uncomment the below two lines.
# If you have multiple GPUs, you also might want to specify a gpu id.
#DEVICE_OPTION.device_type = caffe2_pb2.CUDA
#DEVICE_OPTION.cuda_gpu_id = 0

# Caffe2 has a concept of "workspace", which is similar to that of Matlab. Each workspace
# is a self-contained set of tensors and networks. In this case, we will just use the default
# workspace so we won't dive too deep into it.
workspace.SwitchWorkspace('default')
Ejemplo n.º 21
0
def create_data_db(dbpath, img_path, lab):
    db_env = lmdb.open(dbpath, map_size=int(1024*1024*1024*30)) # size:30GB
    # print(db_env.stat())
    # print(dir(db_env.info()))
    # with db_env.begin(write=True) as txn:
    txn = db_env.begin(write=True)
    

    # print(type(tensor_protos))
    # print(dir(tensor_protos))
    for k, value in enumerate(img_path):
        # print("env1")
        # display(db_env)
        # print("env2")
        # print(k)
        lab_v = lab[k]
        # print(k, value, lab_v)
        img = cv2.imread(value, cv2.IMREAD_COLOR).astype(np.uint8)# * (1.0 / 255.0)

        # print(img[0:2, 0:2].shape)

        # cv2.namedWindow('img', cv2.WINDOW_AUTOSIZE)
        # cv2.imshow('img', img)
        # cv2.waitKey(0)
        # cv2.destroyAllWindows()

        img_v = cv2.resize(img, (Image_height, Image_width), interpolation = cv2.INTER_AREA)
        # img_v = img_v.swapaxes(1, 2).swapaxes(0, 1)
        img_v = cv2.cvtColor(img_v,cv2.COLOR_BGR2RGB)

        img_obj = Image.fromarray(img_v)
        img_str = StringIO.StringIO()
        img_obj.save(img_str, 'PNG')
        # print(img_v.shape)
        # flatten_img = img_v.reshape(np.prod(img_v.shape))
        # print(np.array2string(flatten_img))
        # print(type(np.array2string(img_v)))
        tensor_protos = caffe2_pb2.TensorProtos()
        image_tensor = tensor_protos.protos.add()
        # image_tensor.dims.extend(img_v.shape)
        image_tensor.data_type = 4
        image_tensor.string_data.append(img_str.getvalue())
        img_str.close()

        label_tensor = tensor_protos.protos.add()
        label_tensor.data_type = 2
#=======================test=============================
        # label_tensor.int32_data.append(k)
#=========================================================
        label_tensor.int32_data.append(lab_v)


        txn.put(
            '{}'.format(k).encode('ascii'),
            tensor_protos.SerializeToString()
        )
        # tensor_protos.Clear()
        if (batch_size - 1) == (k % batch_size):
            txn.commit()
            print("Commit for", k)
            txn = db_env.begin(write=True)

    txn.commit()
    db_env.close()
Ejemplo n.º 22
0
def create_video_db(
    list_file,
    output_file,
    use_list=0,
    use_video_id=0,
    use_start_frame=0,
    num_epochs=1,
):

    # read csv list file
    list = pandas.read_csv(list_file)

    # checking necessary fields of the provided csv file
    assert 'org_video' in list, \
        "The input list does not have org_video column"
    assert 'label' in list, \
        "The input list does not have label column"
    if use_video_id:
        assert 'video_id' in list, \
            "The input list does not have video_id column"
    if use_start_frame:
        assert use_list == 1, "using starting frame is recommended only " + \
            "with using local file setting for feature extraction"
        assert 'start_frm' in list, \
            "The input list does not have start_frame column"

    if num_epochs > 1:
        assert use_list == 1, "using number of epochs > 1 " + \
            "is recommended only with using local file setting" + \
            "otherwise, there will be redundancy in data written into lmdb"

    # Write to lmdb database...
    LMDB_MAP_SIZE = 1 << 40  # MODIFY
    env = lmdb.open(output_file, map_size=LMDB_MAP_SIZE)

    # index and size counters
    total_size = 0
    index = 0
    with env.begin(write=True) as txn:
        for epoch in range(num_epochs):
            # shuffle the data frame
            log.info('shuffling index for epoch {}'.format(epoch))
            list = list.sample(frac=1)
            for _, row in list.iterrows():
                file_name = row["org_video"]
                label = row["label"]

                if not use_list:
                    with open(file_name, mode='rb') as file:
                        video_data = file.read()
                else:
                    video_data = file_name

                tensor_protos = caffe2_pb2.TensorProtos()
                video_tensor = tensor_protos.protos.add()
                video_tensor.data_type = 4  # string data
                video_tensor.string_data.append(str.encode(video_data))

                label_tensor = tensor_protos.protos.add()
                label_tensor.data_type = 2  # int32
                label_tensor.int32_data.append(label)

                if use_start_frame:
                    start_frame = row["start_frm"]
                    start_frame_tensor = tensor_protos.protos.add()
                    start_frame_tensor.data_type = 2  # int32
                    start_frame_tensor.int32_data.append(start_frame)

                if use_video_id:
                    video_id = row["video_id"]
                    video_id_tensor = tensor_protos.protos.add()
                    video_id_tensor.data_type = 10  # int64
                    video_id_tensor.int64_data.append(video_id)

                txn.put('{}'.format(index).encode('ascii'),
                        tensor_protos.SerializeToString())

                index = index + 1
                if index % 1000 == 0:
                    log.info('processed {} videos'.format(index))
                total_size = total_size + len(video_data) + sys.getsizeof(int)
    return total_size
Ejemplo n.º 23
0
for op in initPb.op[-8:]:
	print op.output[0], op.arg[0]
	if op.output[0] in ['fc8_w', 'fc8_b']:




import lmdb
from caffe2.proto import caffe2_pb2 as c2p2
env = lmdb.open('/home/filip/workbench/tree-images/workspace/lmdb/train-augmented-dataset-lmdb-227')
t = env.begin(write=False)
c = t.cursor()
c.first()

tp = c2p2.TensorProtos()
tp.ParseFromString(c.item()[1])

tp.float_data[:10]





import json
from skimage.io import imread
from os.path import join
with open('/home/filip/workbench/tree-images/feature_labels_train.json', 'r') as f:
	data = json.load(f)

for _ in xrange(DATASET_SAMPLE_SIZE):
    random.shuffle(data)

    for num in data:
        count = count + 1
        if count % 100 == 0:
            os.system('clear')
            print GenProgressBar(count, total,
                                 50), '%d/%d picture(s)' % (count, total)

        text = str(num).zfill(DIGITS)
        captcha = image.generate(text)
        captcha_image = Image.open(captcha).convert('L')

        img_data = np.array(captcha_image.getdata())
        img_label = np.array([int(c) for c in text])

        data_and_label = caffe2_pb2.TensorProtos()
        data_and_label.protos.extend(
            [utils.NumpyArrayToCaffe2Tensor(img_data)] + [
                utils.NumpyArrayToCaffe2Tensor(img_label[i])
                for i in range(DIGITS)
            ])
        transaction.put('train_%d' % count, data_and_label.SerializeToString())

del transaction
del db
""" Report """
print 'Generated db:[' + DATABASE_NAME + '] at ' + DATABASE_PATH + '.'
Ejemplo n.º 25
0
def create_data_db(dbpath, img_path, lab, flag):
    db_env = lmdb.open(dbpath,
                       map_size=int(1024 * 1024 * 1024 * 30))  # size:30GB
    # db_env = lmdb.open("/tmp/ttt", map_size=int(1024*1024*1024*30)) # size:30GB
    index_percent = []
    # print(db_env.stat())
    # print(dir(db_env.info()))
    # with db_env.begin(write=True) as txn:
    txn = db_env.begin(write=True)

    # print(type(tensor_protos))
    # print(dir(tensor_protos))
    for k, value in enumerate(img_path):
        # print("env1")
        # display(db_env)
        # print("env2")
        # print(k)
        lab_v = lab[k]
        # print(k, value, lab_v)
        img = cv2.imread(value,
                         cv2.IMREAD_COLOR).astype(np.uint8)  # * (1.0 / 255.0)
        tmp_shape = img.shape[0:2]
        tmp_percent = (tmp_shape[0] * tmp_shape[1]) / (Image_width *
                                                       Image_height)

        # print(img[0:2, 0:2].shape)

        # cv2.namedWindow('img', cv2.WINDOW_AUTOSIZE)
        # cv2.imshow('img', img)
        # cv2.waitKey(0)
        # cv2.destroyAllWindows()
        if "up" == flag:
            img_v = cv2.resize(img, (Image_height, Image_width),
                               interpolation=cv2.INTER_AREA)
        elif "down" == flag:
            tmp_img = np.ones((Image_height, Image_width,
                               3)) * img.mean()  #.astype(np.uint8)
            # print(img.shape)
            tmp_xmin = int(112 - (tmp_shape[1] // 2))
            # print(tmp_xmin)
            tmp_ymin = int(112 - (tmp_shape[0] // 2))
            # print(tmp_ymin)

            tmp_img[tmp_ymin:tmp_ymin + tmp_shape[0],
                    tmp_xmin:tmp_xmin + tmp_shape[1]] = img
            img_v = tmp_img.astype(np.uint8)
            # print(img.mean())
            # print(tmp_img.mean())
            # print(tmp_img[112,112])
        # img_v = img_v.swapaxes(1, 2).swapaxes(0, 1)
        img_v = cv2.cvtColor(img_v, cv2.COLOR_BGR2RGB)
        # print(type(img_v))
        # print(img_v.dtype)
        # print(img_v.shape)
        # exit(0)
        img_obj = Image.fromarray(img_v)
        img_str = StringIO.StringIO()
        img_obj.save(img_str, 'PNG')
        # print(img_v.shape)
        # flatten_img = img_v.reshape(np.prod(img_v.shape))
        # print(np.array2string(flatten_img))
        # print(type(np.array2string(img_v)))
        tensor_protos = caffe2_pb2.TensorProtos()
        image_tensor = tensor_protos.protos.add()
        # image_tensor.dims.extend(img_v.shape)
        image_tensor.data_type = 4
        image_tensor.string_data.append(img_str.getvalue())
        img_str.close()

        label_tensor = tensor_protos.protos.add()
        label_tensor.data_type = 2
        #=======================test=============================
        # label_tensor.int32_data.append(k)
        #=========================================================
        label_tensor.int32_data.append(lab_v)

        index_percent.append((value, k, tmp_percent, lab_v))
        txn.put('{}'.format(k).encode('ascii'),
                tensor_protos.SerializeToString())
        # tensor_protos.Clear()
        if (batch_size - 1) == (k % batch_size):
            txn.commit()
            print("Commit for", k)
            txn = db_env.begin(write=True)

    txn.commit()
    db_env.close()
    return index_percent
Ejemplo n.º 26
0
    def TranslateModel(
        cls,
        caffe_net,
        pretrained_net,
        is_test=False,
        input_mean=None,
        net_state=None,
    ):
        net_state = caffe_pb2.NetState() if net_state is None else net_state
        net = caffe2_pb2.NetDef()
        net.name = caffe_net.name
        net_params = caffe2_pb2.TensorProtos()
        if len(caffe_net.layer) == 0:
            raise ValueError(
                'I think something is wrong. This translation script '
                'only accepts new style layers that are stored in the '
                'layer field.')
        if input_mean:
            caffenet_mean = caffe_pb2.BlobProto()
            caffenet_mean.ParseFromString(open(input_mean, 'rb').read())
            mean_ = utils.CaffeBlobToNumpyArray(caffenet_mean)
            mean_tensor = utils.NumpyArrayToCaffe2Tensor(mean_, 'mean_')
            net_params.protos.extend([mean_tensor])
            mean_op = caffe2_pb2.OperatorDef()
            mean_op.type = 'Sub'
            mean_op.input.extend(['data_', 'mean_'])
            # Assume that input blob's name is "data"
            mean_op.output.extend(['data'])
            net.op.extend([mean_op])
        i = 0
        while i < len(caffe_net.layer):
            if not _ShouldInclude(net_state, caffe_net.layer[i]):
                log.info('Current net state does not need layer {}'.format(
                    caffe_net.layer[i].name))
                continue
            log.info('Translate layer {}'.format(caffe_net.layer[i].name))
            # Get pretrained one
            pretrained_layers_index = ([
                l for l in xrange(len(pretrained_net.layer))
                if pretrained_net.layer[l].name == caffe_net.layer[i].name
            ] + [
                l for l in xrange(len(pretrained_net.layers))
                if pretrained_net.layers[l].name == caffe_net.layer[i].name
            ])
            is_bn = False
            if len(pretrained_layers_index) > 1:
                raise ValueError(
                    'huh? more than one pretrained layer of one name?')
            elif len(pretrained_layers_index) == 1:
                if pretrained_net.layer[
                        pretrained_layers_index[0]].type == "BatchNorm":
                    # A Scale layer should follow BatchNorm layer
                    # according to paper https://arxiv.org/abs/1502.03167.
                    assert pretrained_net.layer[pretrained_layers_index[0] +
                                                1].type == "Scale"
                    pretrained_blobs = [utils.CaffeBlobToNumpyArray(blob)
                    for blob in pretrained_net.layer[pretrained_layers_index[0]].blobs] + \
                        [utils.CaffeBlobToNumpyArray(blob)
                    for blob in pretrained_net.layer[pretrained_layers_index[0] + 1].blobs]
                    is_bn = True
                else:
                    pretrained_blobs = [
                        utils.CaffeBlobToNumpyArray(blob) for blob in
                        pretrained_net.layer[pretrained_layers_index[0]].blobs
                    ]
            else:
                # No pretrained layer for the given layer name. We'll just pass
                # no parameter blobs.
                # print 'No pretrained layer for layer', layer.name
                pretrained_blobs = []

            operators, params = cls.TranslateLayer(caffe_net.layer[i],
                                                   pretrained_blobs, is_test)
            net.op.extend(operators)
            net_params.protos.extend(params)
            if is_bn:
                i += 2
            else:
                i += 1
        return net, net_params
Ejemplo n.º 27
0
pyplot.title("Training data distribution, feature 0 and 1")
for i in range(3):
    pyplot.plot(train_features[train_labels == i, 0],
                train_features[train_labels == i, 1], legend[i])
pyplot.figure()
pyplot.title("Testing data distribution, feature 0 and 1")
for i in range(3):
    pyplot.plot(test_features[test_labels == i, 0],
                test_features[test_labels == i, 1], legend[i])

# Now, as promised, let's put things into a Caffe2 DB. In this DB, what would happen is that we will use "train_xxx" as the key, and use a TensorProtos object to store two tensors for each data point: one as the feature and one as the label. We will use Caffe2 python's DB interface to do so.

# In[6]:

# First, let's see how one can construct a TensorProtos protocol buffer from numpy arrays.
feature_and_label = caffe2_pb2.TensorProtos()
feature_and_label.protos.extend([
    utils.NumpyArrayToCaffe2Tensor(features[0]),
    utils.NumpyArrayToCaffe2Tensor(labels[0])
])
print('This is what the tensor proto looks like for a feature and its label:')
print(str(feature_and_label))
print('This is the compact string that gets written into the db:')
print(feature_and_label.SerializeToString())

# In[7]:

# Now, actually write the db.


def write_db(db_type, db_name, features, labels):
Ejemplo n.º 28
0
    def TranslateModel(cls,
                       caffe_net,
                       pretrained_net,
                       is_test=False,
                       net_state=None,
                       remove_legacy_pad=False,
                       input_dims=None):
        net_state = caffe_pb2.NetState() if net_state is None else net_state
        net = caffe2_pb2.NetDef()
        net.name = caffe_net.name
        net_params = caffe2_pb2.TensorProtos()
        if len(caffe_net.layers) > 0:
            raise ValueError(
                'I think something is wrong. This translation script '
                'only accepts new style layers that are stored in the '
                'layer field.')
        if not input_dims:
            input_dims = _GetInputDims(caffe_net)
        for layer in caffe_net.layer:
            if not _ShouldInclude(net_state, layer):
                log.info('Current net state does not need layer {}'.format(
                    layer.name))
                continue
            log.info('Translate layer {}'.format(layer.name))
            # Get pretrained one
            pretrained_layers = (
                [l for l in pretrained_net.layer if l.name == layer.name] +
                [l for l in pretrained_net.layers if l.name == layer.name])
            if len(pretrained_layers) > 1:
                print('>>> huh? more than one pretrained layer of one name?')
                print(
                    '>>> Assuming these layers have no trainable parameters (e.g relu or pooling)'
                )

                print([(pt.name, pt.type) for pt in pretrained_layers])
                pt_types = [pt.type for pt in pretrained_layers]
                if len(set(pt_types)) == len(pt_types):
                    print(
                        '>>> But, just in case, try to match layer types since types are unique. If not, do not transfer params.'
                    )
                    for pt in pretrained_layers:
                        if pt.type == layer.type:
                            print '  Found matching type {}'.format(layer.type)
                            print '  Setting pretrained blobs'
                            pretrained_blobs = [
                                utils.CaffeBlobToNumpyArray(blob)
                                for blob in pt.blobs
                            ]
                            #print pretrained_blobs

                else:
                    print('>>> Setting pretrained blobs = []')
                    pretrained_blobs = []

                #raise ValueError(
                #    'huh? more than one pretrained layer of one name?')
            elif len(pretrained_layers) == 1:
                pretrained_blobs = [
                    utils.CaffeBlobToNumpyArray(blob)
                    for blob in pretrained_layers[0].blobs
                ]
            else:
                # No pretrained layer for the given layer name. We'll just pass
                # no parameter blobs.
                # print 'No pretrained layer for layer', layer.name
                pretrained_blobs = []

            operators, params = cls.TranslateLayer(layer,
                                                   pretrained_blobs,
                                                   is_test,
                                                   net=net,
                                                   net_params=net_params,
                                                   input_dims=input_dims)

            net.op.extend(operators)
            net_params.protos.extend(params)

        if remove_legacy_pad:
            assert input_dims, \
                   'Please specify input_dims to remove legacy_pad'
            net = _RemoveLegacyPad(net, net_params, input_dims)

        return net, net_params