Ejemplo n.º 1
0
    def validate(self, epoch):
        f1 = AverageMeter("f1")
        acc = AverageMeter("acc")
        losses = AverageMeter("losses")

        self.model.eval()
        with torch.no_grad():
            for step, (x, y) in enumerate(self.test_loader):
                bs = x.size(0)
                logits = self.model(x)
                if isinstance(logits, tuple):
                    logits, _ = logits
                metrics = accuracy_metrics(logits, y)
                loss = self.criterion(logits, y)
                losses.update(loss.item(), bs)
                acc.update(metrics["acc_score"], bs)
                f1.update(metrics["f1_score"], bs)

        logger.info("Valid: [{:3d}/{}] Loss {losses.avg:.3f} "
                    "acc {acc.avg:.2%}, f1 {f1.avg:.2%}".format(epoch + 1,
                                                                100,
                                                                losses=losses,
                                                                acc=acc,
                                                                f1=f1))
        return f1.avg, losses.avg
Ejemplo n.º 2
0
def load_mode(args):
    core = get_plugin(args.device, args.l, args.config)
    log.info('IR for {} : {}'.format(args.device, args.model))
    log.info('Loading blob from {}'.format(args.load))
    net = get_net(model=args.model, core=core)
    net_layers, net_inputs, net_outputs = get_model_info(net)
    out_layers = get_layers_list(net_layers, net_inputs, net_outputs, args.layers)
    print_input_layers(net_inputs)
    print_output_layers(out_layers)
    layers_map = manage_user_outputs_with_mapping(mapping=args.mapping, reference_mapping=args.reference_mapping,
                                                  user_layers=out_layers)
    inputs = input_processing(args.model, net_inputs, args.input, layers_map)
    global_accuracy = []
    loaded = load_dump(args.load)
    for out_layer in layers_map:
        ref_out_layer = layers_map[out_layer]
        if out_layer == ref_out_layer:
            log.info('Layer {} statistics'.format(out_layer))
        else:
            log.info('Statistics \'{}\' vs \'{}\''.format(out_layer, ref_out_layer))
        net_copy = get_net_copy_with_output(model=args.model, output=out_layer, core=core)
        results = infer(net=net_copy, core=core, device=args.device, inputs=inputs, output=[out_layer])
        if out_layer not in results:
            continue
        out_blob, pc = results[out_layer]
        if ref_out_layer not in loaded:
            continue
        ref_out_blob = loaded[ref_out_layer]['blob']
        a_m = accuracy_metrics(out_blob=out_blob, ref_out_blob=ref_out_blob)
        if 'pc' in loaded[ref_out_layer]:
            ref_pc = loaded[ref_out_layer]['pc']
            performance_metrics(pc=pc, ref_pc=ref_pc)
        blob_counters(out_blob=out_blob, ref_out_blob=ref_out_blob)
        global_accuracy = update_global_accuracy_matrics(global_accuracy=global_accuracy, current_accuracy=a_m)
    print_all_over_the_net_metrics(global_accuracy=global_accuracy)
Ejemplo n.º 3
0
def one_ir_mode(args):
    net = get_net(model=args.model)
    net_layers, net_inputs, net_outputs, precision = get_model_info(net)
    log.info('{}:{} vs {}:{}'.format(args.device, precision, args.reference_device, precision))
    log.info('The same IR on both devices: {}'.format(args.model))
    out_layers = get_layers_list(net_layers, net_inputs, net_outputs, args.layers)
    print_input_layers(net_inputs)
    print_output_layers(out_layers)
    plugin = get_plugin(args.device, args.l, args.plugin_path, args.config)
    ref_plugin = get_plugin(args.reference_device, args.l, args.plugin_path, args.reference_config)
    global_accuracy = []
    inputs = input_processing(model_path=args.model, net_inputs=net_inputs, input_file=args.input)
    global_times, ref_global_times = overall_accuracy_check(model=args.model, ref_model=args.model,
                                                            out_layers=out_layers, ref_out_layers=out_layers,
                                                            inputs=inputs, ref_inputs=inputs, plugin=plugin,
                                                            ref_plugin=ref_plugin, layers=args.layers,
                                                            num_of_iterations=args.num_of_iterations)
    for out_layer in out_layers:
        log.info('Layer {} statistics'.format(out_layer))
        net_copy = get_net_copy_with_output(model=args.model, output=out_layer)
        results = infer(net=net_copy, plugin=plugin, inputs=inputs, output=[out_layer])
        if out_layer not in results:
            continue
        out_blob, pc = results[out_layer]
        ref_results = infer(net=net_copy, plugin=ref_plugin, inputs=inputs, output=[out_layer])
        if out_layer not in ref_results:
            continue
        ref_out_blob, ref_pc = ref_results[out_layer]
        a_m = accuracy_metrics(out_blob=out_blob, ref_out_blob=ref_out_blob)
        performance_metrics(pc=pc, ref_pc=ref_pc)
        blob_counters(out_blob=out_blob, ref_out_blob=ref_out_blob)
        global_accuracy = update_global_accuracy_matrics(global_accuracy=global_accuracy, current_accuracy=a_m)
    print_all_over_the_net_metrics(global_times=global_times, ref_global_times=ref_global_times,
                                   global_accuracy=global_accuracy)
Ejemplo n.º 4
0
def one_ir_mode(args):
    core = get_plugin(args.device, args.l, args.config)
    net = get_net(model=args.model, core=core)
    net_layers, net_inputs, net_outputs = get_model_info(net)
    log.info(f'{args.device} vs {args.reference_device}')
    log.info(f'The same IR on both devices: {args.model}')
    out_layers = get_layers_list(net_layers, net_inputs, net_outputs,
                                 args.layers)
    print_input_layers(net_inputs)
    print_output_layers(out_layers)
    ref_core = get_plugin(args.reference_device, args.l, args.reference_config)
    global_accuracy = []
    inputs = input_processing(model_path=args.model,
                              net_inputs=net_inputs,
                              input_file=args.input)
    global_times, ref_global_times = overall_accuracy_check(
        model=args.model,
        ref_model=args.model,
        out_layers=out_layers,
        ref_out_layers=out_layers,
        inputs=inputs,
        ref_inputs=inputs,
        core=core,
        device=args.device,
        ref_core=ref_core,
        ref_device=args.reference_device,
        layers=args.layers,
        num_of_iterations=args.num_of_iterations)
    for out_layer in out_layers:
        log.info(f'Layer {out_layer} statistics')
        net_copy = get_net_copy_with_output(model=args.model,
                                            output=out_layer,
                                            core=core)
        results = infer(net=net_copy,
                        core=core,
                        device=args.device,
                        inputs=inputs,
                        output=[out_layer])
        if out_layer not in results:
            continue
        out_blob, pc = results[out_layer]
        ref_results = infer(net=net_copy,
                            core=ref_core,
                            device=args.reference_device,
                            inputs=inputs,
                            output=[out_layer])
        if out_layer not in ref_results:
            continue
        ref_out_blob, ref_pc = ref_results[out_layer]
        a_m = accuracy_metrics(out_blob=out_blob, ref_out_blob=ref_out_blob)
        performance_metrics(pc=pc, ref_pc=ref_pc)
        blob_counters(out_blob=out_blob, ref_out_blob=ref_out_blob)
        global_accuracy = update_global_accuracy_matrics(
            global_accuracy=global_accuracy, current_accuracy=a_m)
    print_all_over_the_net_metrics(global_times=global_times,
                                   ref_global_times=ref_global_times,
                                   global_accuracy=global_accuracy)
Ejemplo n.º 5
0
def two_ir_mode(args):
    core = get_plugin(args.device, args.l, args.config)
    ref_core = get_plugin(args.reference_device, args.l, args.reference_config)
    net = get_net(model=args.model, core=core)
    net_layers, net_inputs, net_outputs = get_model_info(net)
    ref_net = get_net(model=args.reference_model, core=ref_core)
    ref_net_layers, ref_net_inputs, ref_net_outputs = get_model_info(ref_net)
    log.info('{} vs {}'.format(args.device, args.reference_device))
    log.info('IR for {} : {}'.format(args.device, args.model))
    log.info('IR for {} : {}'.format(args.reference_device, args.reference_model))
    out_layers = get_layers_list(net_layers, net_inputs, net_outputs, args.layers)
    ref_out_layers = get_layers_list(ref_net_layers, ref_net_inputs, ref_net_outputs, args.layers)
    print_input_layers(net_inputs)
    print_output_layers(out_layers)
    layers_map = manage_user_outputs_with_mapping(mapping=args.mapping, reference_mapping=args.reference_mapping,
                                                  user_layers=out_layers)
    inputs = input_processing(model_path=args.model, net_inputs=net_inputs, input_file=args.input,
                              layers_map=layers_map)
    ref_inputs = input_processing(model_path=args.reference_model, net_inputs=ref_net_inputs, input_file=args.input,
                                  layers_map=layers_map)
    global_accuracy = []
    global_times, ref_global_times = overall_accuracy_check(model=args.model, ref_model=args.reference_model,
                                                            out_layers=out_layers, ref_out_layers=ref_out_layers,
                                                            inputs=inputs, ref_inputs=ref_inputs, core=core,
                                                            device=args.device, ref_core=ref_core,
                                                            ref_device=args.reference_device, layers=args.layers,
                                                            num_of_iterations=args.num_of_iterations)
    for out_layer in layers_map:
        ref_out_layer = layers_map[out_layer]
        if out_layer == ref_out_layer:
            log.info('Layer {} statistics'.format(out_layer))
        else:
            log.info('Statistics \'{}\' vs \'{}\''.format(out_layer, ref_out_layer))
        net_copy = get_net_copy_with_output(model=args.model, output=out_layer, core=core)
        ref_net_copy = get_net_copy_with_output(model=args.reference_model, output=ref_out_layer, core=ref_core)
        results = infer(net=net_copy, core=core, device=args.device, inputs=inputs, output=[out_layer])
        if out_layer not in results:
            continue
        out_blob, pc = results[out_layer]
        ref_results = infer(net=ref_net_copy, core=ref_core, device=args.reference_device,
                            inputs=ref_inputs, output=[ref_out_layer])
        ref_out_blob, ref_pc = ref_results[ref_out_layer]
        if ref_out_layer not in ref_results:
            continue
        a_m = accuracy_metrics(out_blob=out_blob, ref_out_blob=ref_out_blob)
        performance_metrics(pc=pc, ref_pc=ref_pc)
        blob_counters(out_blob=out_blob, ref_out_blob=ref_out_blob)
        global_accuracy = update_global_accuracy_matrics(global_accuracy=global_accuracy, current_accuracy=a_m)
    print_all_over_the_net_metrics(global_times=global_times, ref_global_times=ref_global_times,
                                   global_accuracy=global_accuracy)
Ejemplo n.º 6
0
    def train(self, epoch):
        f1 = AverageMeter("f1")
        acc = AverageMeter("acc")
        losses = AverageMeter("losses")

        self.model.train()
        cur_step = epoch * len(self.train_loader)
        cur_lr = self.optimizer.param_groups[0]["lr"]
        logger.info("Epoch %d LR %.6f", epoch, cur_lr)
        for step, (x, y) in enumerate(self.train_loader):
            bs = x.size(0)
            self.optimizer.zero_grad()
            logits = self.model(x)

            if isinstance(logits, tuple):
                logits, aux_logits = logits
                aux_loss = criterion(aux_logits, y)
            else:
                aux_loss = 0.
            metrics = accuracy_metrics(logits, y)
            loss = self.criterion(logits, y)
            loss = loss + 0.4 * aux_loss
            loss.backward()
            nn.utils.clip_grad_norm_(self.model.parameters(), 5.)
            self.optimizer.step()
            losses.update(loss.item(), bs)
            acc.update(metrics["acc_score"], bs)
            f1.update(metrics["f1_score"], bs)
            cur_step += 1
        logger.info("Train: [{:3d}/{}] Loss {losses.avg:.3f} "
                    "acc {acc.avg:.2%}, f1 {f1.avg:.2%}".format(epoch + 1,
                                                                100,
                                                                losses=losses,
                                                                acc=acc,
                                                                f1=f1))
        return losses.avg