示例#1
0
    def train(self):
        num_epochs = self.hyperparams.epochs
        start_epoch = self.hyperparams.start_epoch if hasattr(
            self.hyperparams, 'start_epoch') else 0
        for epoch in range(start_epoch, num_epochs):
            if hasattr(self.conf, 'epoch'):
                self.conf.epoch.value = epoch
                print(self.conf.epoch)
            self.model.train()
            try:
                self.conf.lr_scheduler.step()
                print(
                    f'Elapsed time: {datetime.datetime.now() - self.experiment_start}'
                )
                for group in self.optimizer.param_groups:
                    print('LR: {:.4e}'.format(group['lr']))
                eval_epoch = ((epoch % self.conf.eval_each == 0)
                              or (epoch == num_epochs - 1))  # and (epoch > 0)
                self.model.criterion.step_counter = 0
                print(f'Epoch: {epoch} / {num_epochs - 1}')
                if eval_epoch and not self.args.dry:
                    print("Experiment dir: %s" % self.experiment_dir)
                batch_iterator = iter(enumerate(self.loader_train))
                start_t = perf_counter()
                for step, batch in batch_iterator:
                    self.optimizer.zero_grad()
                    loss = self.model.loss(batch)
                    loss.backward()
                    self.optimizer.step()
                    if step % 80 == 0 and step > 0:
                        curr_t = perf_counter()
                        print(
                            f'{(step * self.conf.batch_size) / (curr_t - start_t):.2f}fps'
                        )
                if not self.args.dry:
                    store(self.model, self.store_path, 'model')
                    store(self.optimizer, self.store_path, 'optimizer')
                if eval_epoch and self.args.eval:
                    print('Evaluating model')
                    iou, per_class_iou = evaluate_semseg(
                        self.model, self.loader_val,
                        self.dataset_val.class_info)
                    self.validation_ious += [iou]
                    if self.args.eval_train:
                        print('Evaluating train')
                        evaluate_semseg(self.model, self.loader_train,
                                        self.dataset_train.class_info)
                    if iou > self.best_iou:
                        self.best_iou = iou
                        self.best_iou_epoch = epoch
                        if not self.args.dry:
                            copy(self.store_path.format('model'),
                                 self.store_path.format('model_best'))
                    print(
                        f'Best mIoU: {self.best_iou:.2f}% (epoch {self.best_iou_epoch})'
                    )

            except KeyboardInterrupt:
                break
示例#2
0
def eval(config='configs/pyramid.py'):
    conf_path = Path(config)
    conf = import_module(config)
    class_info = conf.dataset_val.class_info

    model = conf.model.cuda()

    for loader, name in conf.eval_loaders:
        iou_acc = evaluate_semseg(model,
                                  loader,
                                  class_info,
                                  observers=conf.eval_observers)
        print(f'{name}: {iou_acc:.2f}')
        # Note: we are expecting only one loader (val)
        return iou_acc
示例#3
0
文件: eval.py 项目: lzb863/swiftnet-1
import argparse
from pathlib import Path
import importlib.util
from evaluation import evaluate_semseg


def import_module(path):
    spec = importlib.util.spec_from_file_location("module", path)
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    return module


parser = argparse.ArgumentParser(description='Detector train')
parser.add_argument('config', type=str, help='Path to configuration .py file')
parser.add_argument('--profile', dest='profile', action='store_true', help='Profile one forward pass')

if __name__ == '__main__':
    args = parser.parse_args()
    conf_path = Path(args.config)
    conf = import_module(args.config)

    class_info = conf.dataset_val.class_info

    model = conf.model.cuda()

    for loader, name in conf.eval_loaders:
        iou, per_class_iou = evaluate_semseg(model, loader, class_info, observers=conf.eval_observers)
        print(f'{name}: {iou:.2f}')
示例#4
0
            BasicBlock = BasicBlock34
        else:
            BasicBlock = BasicBlock_SN

    store_dir = Path(args.store_dir)
    store_stats_path = store_dir / "params_mious.txt"
    os.makedirs(str(store_dir), exist_ok=True)

    store_data(store_stats_path, "Params", "mIoU", "GMACs", "FPS")

    pruning_percentages = conf.pruning_percentages
    print("PRUNING PERCENTAGES: ", pruning_percentages)
    pruning_indices = reset_pruning_indices(conf.model, BasicBlock)
    print("INITIAL TESTING:")
    print("MODEL:\n", conf.model)
    iou, per_class_iou = evaluate_semseg(conf.model.cuda(), conf.loader_val,
                                         conf.dataset_val.class_info)
    params, macs, fps = measure_gmacs_fps()
    store_data(store_stats_path, params, iou, macs, fps)

    for i in range(10):
        if i != 0:
            iou, per_class_iou = evaluate_semseg(conf.model.cuda(),
                                                 conf.loader_val,
                                                 conf.dataset_val.class_info)
        conf.model.to("cpu")

        if conf.prune_mode == "rewind":
            model, prune_stats, _ = prune_with_rewinding()
        elif conf.prune_mode == "reset":
            model, prune_stats = prune_with_resetting()
        else: