Ejemplo n.º 1
0
def convert(tensor_output,
            tensor_input,
            dataset,
            eight_bit_mode=False,
            input_min=0,
            input_max=1,
            prefix=''):
    with tf.Session() as sess:
        converter = tensor_head_to_tensor_list.PbConverter(
            tensor_output, tensor_input)
        converter.convert()
        layers = tensor_list_to_layer_list.convert_to_layers(
            sess, dataset, converter.dst)
        k210_layers = layer_list_to_k210_layer.gen_k210_layers(
            layers,
            sess,
            dataset,
            range_from_batch=range_from_batch.RangeFromBatchMeanMinsMaxs(),
            eight_bit_mode=eight_bit_mode,
            input_min=input_min,
            input_max=input_max)

        output_code = k210_layer_to_c_code.gen_layer_list_code(
            k210_layers, eight_bit_mode, prefix)
        output_bin = k210_layer_to_bin.gen_layer_bin(k210_layers,
                                                     eight_bit_mode)
        return (output_code, output_bin)
Ejemplo n.º 2
0
def convert(tensor_output,
            tensor_input,
            dataset_pack,
            eight_bit_mode=False,
            input_min=0,
            input_max=1):
    with tf.Session() as sess:
        converter = tensor_head_to_tensor_list.PbConverter(
            tensor_output, tensor_input)
        converter.convert()
        layers = tensor_list_to_layer_list.convert_to_layers(
            sess, converter.dst)
        k210_layers = layer_list_to_k210_layer.gen_k210_layers(
            layers,
            sess,
            dataset_pack,
            eight_bit_mode=eight_bit_mode,
            input_min=input_min,
            input_max=input_max)

        code = k210_layer_to_c_code.gen_layer_list_code(
            k210_layers, eight_bit_mode)
        return code
def main():
    def str2bool(v):
        if v.lower() in ('yes', 'true', 't', 'y', '1'):
            return True
        elif v.lower() in ('no', 'false', 'f', 'n', '0'):
            return False
        else:
            raise argparse.ArgumentTypeError('Boolean value expected.')

    parser = argparse.ArgumentParser()
    parser.add_argument('--dataset_input_name', default='input:0')
    parser.add_argument('--eight_bit_mode',
                        type=str2bool,
                        nargs='?',
                        const=True,
                        default=False)
    parser.add_argument('--output_path', default='build/gencode_output')
    parser.add_argument('--output_bin_name', default='build/model.bin')
    parser.add_argument('--prefix', default='')
    parser.add_argument('--layer_start_idx', type=int, default=0)

    parser.add_argument('--model_loader', default='model_loader/pb')
    parser.add_argument('--tensorboard_mode',
                        type=str2bool,
                        nargs='?',
                        const=True,
                        default=False)
    parser.add_argument('--pb_path', default=None)
    parser.add_argument('--h5_path', default=None)
    parser.add_argument('--h5_custom_objects', default=None)
    parser.add_argument('--cfg_path', default=None)
    parser.add_argument('--weights_path', default=None)
    parser.add_argument('--tensor_input_name', default=None)
    parser.add_argument('--tensor_output_name', default=None)
    parser.add_argument('--tensor_input_min', type=float, default=0)
    parser.add_argument('--tensor_input_max', type=float, default=1)
    parser.add_argument('--tensor_input_minmax_auto',
                        type=str2bool,
                        nargs='?',
                        const=True,
                        default=True)

    parser.add_argument('--dataset_loader',
                        default='dataset_loader/img_0_1.py')
    parser.add_argument('--dataset_pic_path', default='dataset/yolo')
    parser.add_argument('--dataset_path', default='dataset/yolo')
    parser.add_argument('--image_w', type=int, default=320)
    parser.add_argument('--image_h', type=int, default=240)

    args = parser.parse_args()

    eight_bit_mode = args.eight_bit_mode
    output_path = args.output_path
    output_bin_name = args.output_bin_name
    args.prefix = args.prefix if len(args.prefix) > 0 \
        else os.path.basename(args.output_path).replace('.', '_').replace('-', '_')

    layer_start_idx = args.layer_start_idx

    model_loader = args.model_loader
    tensorboard_mode = args.tensorboard_mode  # used in model loader
    pb_path = args.pb_path  # used in model loader
    tensor_input_name = args.tensor_input_name  # used in model loader
    tensor_output_name = args.tensor_output_name  # used in model loader
    input_min = args.tensor_input_min  # used in model loader
    input_max = args.tensor_input_max  # used in model loader
    input_minmax_auto = args.tensor_input_minmax_auto  # used in model loader

    dataset_loader = args.dataset_loader
    dataset_input_name = args.dataset_input_name
    dataset_pic_path = args.dataset_pic_path  # used in dataset loader
    image_w = args.image_w  # used in dataset loader
    image_h = args.image_h  # used in dataset loader

    if ':' not in dataset_input_name:
        args.dataset_input_name = dataset_input_name + ':0'

    if output_path.endswith('.c'):
        output_path = output_path[:-2]

    dataset_loader_module = tools.import_from_path(dataset_loader)

    dataset_val = dataset_loader_module.load_dataset(args)

    model_loader_module = tools.import_from_path(model_loader)
    rfb = range_from_batch.RangeFromBatchMinMax()
    k210_layers = model_loader_module.load_model(dataset_val, rfb, args)

    c_file, h_file = k210_layer_to_c_code.gen_layer_list_code(
        k210_layers, args.eight_bit_mode, args.prefix, args.layer_start_idx)

    os.makedirs(os.path.dirname(output_path), exist_ok=True)

    with open(output_path + '.c', 'w') as of:
        of.write(c_file)
    print('generate {} finish'.format(output_path + '.c'))

    with open(output_path + '.h', 'w') as of:
        of.write(h_file)
    print('generate {} finish'.format(output_path + '.h'))

    try:
        output_bin = k210_layer_to_bin.gen_layer_bin(k210_layers,
                                                     args.eight_bit_mode)
        os.makedirs(os.path.dirname(output_bin_name), exist_ok=True)
        with open(output_bin_name, 'wb') as of:
            of.write(output_bin)
        print('generate bin finish')
    except Exception as e:
        print(e)