Пример #1
0
    def __init__(self):
        self.kf = KalmanFilter()
        self.min_ap_dist = 0.64
        self.tracks = []
        self.remove_tracks = []
        self.track_id = 0

        self.vis_tool = Visualizer("MOTDN")
Пример #2
0
def main():
    begin = time.time()
    viser = Visualizer()
    args = parse_arguments()
    hidden_size = 256
    embed_size = 128
    assert torch.cuda.is_available()

    print("[!] preparing dataset...")
    train_iter, test_iter, val_iter, corpus = load_dataset(args.batch_size)
    zh_size, en_size = corpus.zh_size, corpus.en_size

    print("[!] Instantiating models...")
    encoder = Encoder(en_size,
                      embed_size,
                      hidden_size,
                      n_layers=2,
                      dropout=0.5)
    decoder = Decoder(embed_size,
                      hidden_size,
                      zh_size,
                      n_layers=1,
                      dropout=0.5)
    seq2seq = Seq2Seq(encoder, decoder).cuda()
    optimizer = optim.Adam(seq2seq.parameters(), lr=args.lr)

    print("[!] Begin to train")
    for e in range(1, args.epochs + 1):
        train(e, seq2seq, optimizer, train_iter, zh_size, args.grad_clip,
              corpus, viser, begin)
        # val_loss = evaluate(seq2seq, val_iter, zh_size, corpus)
        # print("[Epoch:%d] val_loss:%5.3f | val_pp:%5.2fS"
        #       % (e, val_loss, math.exp(val_loss)))

        # Save the model if the validation loss is the best we've seen so far.
        # if not best_val_loss or val_loss < best_val_loss:
        if True:
            print("[!] best model occur, saving model...")

            # If find the new best model, try to plot text
            if not os.path.isdir(".save"):
                os.makedirs(".save")
            torch.save(seq2seq.state_dict(), '.save/seq2seq_%d.pt' % (e))

            # plot text from the test dataset
            # only plot 1 sentences
            test_batch = random.choice(train_iter)
            src = test_batch.get_src()[:, 0].unsqueeze(0).cuda()
            trg = test_batch.get_target()[:, 0].cuda()
            pre = seq2seq.eval_forward(src, 100, corpus.zh_stoi['<sos>'])
            src_sent = ' '.join([corpus.en_itos[int(word)] for word in src[0]])
            trg_sent = ' '.join([corpus.zh_itos[int(word)] for word in trg])
            pre_sent = ' '.join([corpus.zh_itos[int(word)] for word in pre])
            viser.plot_text(e, src_sent, pre_sent, trg_sent)

    # test_loss = evaluate(seq2seq, test_iter, zh_size, corpus)
    # print("[TEST] Final loss:%5.2f" % test_loss)
    print('[!] Training over')
Пример #3
0
    def __init__(self, config):

        # data
        self.train_data = AnnPolygon(config, train=True)
        self.val_data = AnnPolygon(config, train=False)
        self.num_points = config.num_points
        self.gt_num_points = config.gt_num_points

        # model
        self.model = Snake(state_dim=config.batch_size,
                           feature_dim=6,
                           conv_type='dgrid')

        # Run on GPU/CPU
        if torch.cuda.is_available():
            self.device = torch.device(f"cuda:{config.multi_gpu[0]}")
        else:
            self.device = torch.device(f"cpu")

        # check if load from existing model
        if config.reload_model_path:
            self.model.load(config.reload_model_path)
        else:
            self.model.cuda()

        self.train_dataloader = DataLoader(self.train_data,
                                           config.batch_size,
                                           shuffle=True,
                                           num_workers=config.num_workers,
                                           drop_last=True)
        self.val_dataloader = DataLoader(self.val_data,
                                         config.batch_size,
                                         shuffle=True,
                                         num_workers=config.num_workers,
                                         drop_last=True)

        # optimizer
        self.criterion = dist_chamfer_2D.chamfer_2DDist()
        if config.optimizer == "adam":
            self.lr = config.learning_rate
            self.optimizer = Adam(self.model.parameters(), lr=self.lr)
        elif config.optimizer == "sgd":
            self.lr = config.learning_rate / 10
            self.optimizer = SGD(self.model.parameters(), lr=self.lr)

        self.train_loss = meter.AverageValueMeter()
        self.val_loss = meter.AverageValueMeter()

        self.epochs = config.epochs

        self.vis = Visualizer(config)
Пример #4
0
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('filename',
                        type=str)  # defaultIS.h5/snapshots/iter0000480
    parser.add_argument('--vid', type=str, default='/tmp/madrl.mp4')
    parser.add_argument('--deterministic', action='store_true', default=False)
    parser.add_argument('--heuristic', action='store_true', default=False)
    parser.add_argument('--evaluate', action='store_true', default=False)
    parser.add_argument('--n_trajs', type=int, default=20)
    parser.add_argument('--n_steps', type=int, default=500)
    parser.add_argument('--same_con_pol', action='store_true')
    args = parser.parse_args()

    fh = FileHandler(args.filename)
    env_map = TwoDMaps.rectangle_map(
        *map(int, fh.train_args['map_size'].split(',')))
    map_pool = [env_map]
    # map_pool = np.load(
    # os.path.join('/scratch/megorov/deeprl/MADRL/runners/maps/', os.path.basename(fh.train_args[
    # 'map_file'])))

    env = PursuitEvade(map_pool,
                       n_evaders=fh.train_args['n_evaders'],
                       n_pursuers=fh.train_args['n_pursuers'],
                       obs_range=fh.train_args['obs_range'],
                       n_catch=fh.train_args['n_catch'],
                       urgency_reward=fh.train_args['urgency'],
                       surround=bool(fh.train_args['surround']),
                       sample_maps=bool(fh.train_args['sample_maps']),
                       flatten=bool(fh.train_args['flatten']),
                       reward_mech='global',
                       catchr=fh.train_args['catchr'],
                       term_pursuit=fh.train_args['term_pursuit'])

    if fh.train_args['buffer_size'] > 1:
        env = ObservationBuffer(env, fh.train_args['buffer_size'])

    hpolicy = None
    if args.heuristic:
        from heuristics.pursuit import PursuitHeuristicPolicy
        hpolicy = PursuitHeuristicPolicy(env.agents[0].observation_space,
                                         env.agents[0].action_space)

    if args.evaluate:
        minion = Evaluator(env, fh.train_args, args.n_steps, args.n_trajs,
                           args.deterministic,
                           'heuristic' if args.heuristic else fh.mode)
        evr = minion(fh.filename,
                     file_key=fh.file_key,
                     same_con_pol=args.same_con_pol,
                     hpolicy=hpolicy)
        from tabulate import tabulate
        print(evr)
        print(tabulate(evr, headers='keys'))
    else:
        minion = Visualizer(env, fh.train_args, args.n_steps, args.n_trajs,
                            args.deterministic, fh.mode)
        rew, info = minion(fh.filename, file_key=fh.file_key, vid=args.vid)
        pprint.pprint(rew)
        pprint.pprint(info)
Пример #5
0
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('filename',
                        type=str)  # defaultIS.h5/snapshots/iter0000480
    parser.add_argument('--vid', type=str, default='/tmp/madrl.mp4')
    parser.add_argument('--deterministic', action='store_true', default=False)
    parser.add_argument('--heuristic', action='store_true', default=False)
    parser.add_argument('--evaluate', action='store_true', default=False)
    parser.add_argument('--n_trajs', type=int, default=10)
    parser.add_argument('--n_steps', type=int, default=500)
    parser.add_argument('--same_con_pol', action='store_true')
    args = parser.parse_args()

    fh = FileHandler(args.filename)

    env = MAWaterWorld(
        fh.train_args['n_pursuers'],
        fh.train_args['n_evaders'],
        fh.train_args['n_coop'],
        fh.train_args['n_poison'],
        n_sensors=fh.train_args['n_sensors'],
        food_reward=fh.train_args['food_reward'],
        poison_reward=fh.train_args['poison_reward'],
        reward_mech='global',
        encounter_reward=0,  #fh.train_args['encounter_reward'],
        addid=True,
    )

    if fh.train_args['buffer_size'] > 1:
        env = ObservationBuffer(env, fh.train_args['buffer_size'])

    hpolicy = None
    if args.heuristic:
        from heuristics.waterworld import WaterworldHeuristicPolicy
        hpolicy = WaterworldHeuristicPolicy(env.agents[0].observation_space,
                                            env.agents[0].action_space)

    if args.evaluate:
        minion = Evaluator(env, fh.train_args, args.n_steps, args.n_trajs,
                           args.deterministic,
                           'heuristic' if args.heuristic else fh.mode)
        evr = minion(fh.filename,
                     file_key=fh.file_key,
                     same_con_pol=args.same_con_pol,
                     hpolicy=hpolicy)
        from tabulate import tabulate
        print(tabulate(evr, headers='keys'))
    else:
        minion = Visualizer(env, fh.train_args, args.n_steps, args.n_trajs,
                            args.deterministic,
                            'heuristic' if args.heuristic else fh.mode)
        rew, info = minion(fh.filename,
                           file_key=fh.file_key,
                           vid=args.vid,
                           hpolicy=hpolicy)
        pprint.pprint(rew)
        pprint.pprint(info)
Пример #6
0
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('filename',
                        type=str)  # defaultIS.h5/snapshots/iter0000480
    parser.add_argument('--vid', type=str, default='/tmp/madrl.mp4')
    parser.add_argument('--deterministic', action='store_true', default=False)
    parser.add_argument('--heuristic', action='store_true', default=False)
    parser.add_argument('--evaluate', action='store_true', default=False)
    parser.add_argument('--save_file', type=str, default=None)
    parser.add_argument('--n_trajs', type=int, default=20)
    parser.add_argument('--n_steps', type=int, default=500)
    parser.add_argument('--same_con_pol', action='store_true')
    args = parser.parse_args()

    fh = FileHandler(args.filename)

    env = MultiAnt(n_legs=fh.train_args['n_legs'],
                   ts=fh.train_args['ts'],
                   integrator=fh.train_args['integrator'],
                   out_file=fh.train_args['out_file'],
                   base_file=fh.train_args['base_file'],
                   reward_mech=fh.train_args['reward_mech'])

    if fh.train_args['buffer_size'] > 1:
        env = ObservationBuffer(env, fh.train_args['buffer_size'])

    hpolicy = None
    if args.evaluate:
        minion = Evaluator(env, fh.train_args, args.n_steps, args.n_trajs,
                           args.deterministic,
                           'heuristic' if args.heuristic else fh.mode)
        evr = minion(fh.filename,
                     file_key=fh.file_key,
                     same_con_pol=args.same_con_pol,
                     hpolicy=hpolicy)
        if args.save_file:
            pickle.dump(evr, open(args.save_file, "wb"))
        from tabulate import tabulate
        #print(tabulate(evr, headers='keys'))

    else:
        minion = Visualizer(env, fh.train_args, args.n_steps, args.n_trajs,
                            args.deterministic, fh.mode)
        rew, info = minion(fh.filename, file_key=fh.file_key, vid=args.vid)
        pprint.pprint(rew)
        pprint.pprint(info)
Пример #7
0
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('filename',
                        type=str)  # defaultIS.h5/snapshots/iter0000480
    parser.add_argument('--vid', type=str, default='/tmp/madrl.mp4')
    parser.add_argument('--deterministic', action='store_true', default=False)
    parser.add_argument('--heuristic', action='store_true', default=False)
    parser.add_argument('--evaluate', action='store_true', default=False)
    parser.add_argument('--n_trajs', type=int, default=20)
    parser.add_argument('--n_steps', type=int, default=500)
    parser.add_argument('--same_con_pol', action='store_true')
    args = parser.parse_args()

    fh = FileHandler(args.filename)

    env = MultiWalkerEnv(fh.train_args['n_walkers'],
                         fh.train_args['position_noise'],
                         fh.train_args['angle_noise'],
                         reward_mech='global')  #fh.train_args['reward_mech'])

    if fh.train_args['buffer_size'] > 1:
        env = ObservationBuffer(env, fh.train_args['buffer_size'])

    hpolicy = None
    if args.heuristic:
        from heuristics.multiwalker import MultiwalkerHeuristicPolicy
        hpolicy = MultiwalkerHeuristicPolicy(env.agents[0].observation_space,
                                             env.agents[0].action_space)

    if args.evaluate:
        minion = Evaluator(env, fh.train_args, args.n_steps, args.n_trajs,
                           args.deterministic,
                           'heuristic' if args.heuristic else fh.mode)
        evr = minion(fh.filename,
                     file_key=fh.file_key,
                     same_con_pol=args.same_con_pol,
                     hpolicy=hpolicy)
        from tabulate import tabulate
        print(tabulate(evr, headers='keys'))
    else:
        minion = Visualizer(env, fh.train_args, args.n_steps, args.n_trajs,
                            args.deterministic, fh.mode)
        rew, info = minion(fh.filename, file_key=fh.file_key, vid=args.vid)
        pprint.pprint(rew)
        pprint.pprint(info)
Пример #8
0
 def setup_vis(self):
     ''' Returns Visualizer object initialized with 2-D bounds of problem. '''
     return Visualizer(self.x_min, self.x_max, self.y_min, self.y_max, [])
Пример #9
0
    for i in range(400):
        T = 100
        xdims = pm.xdims
        udims = pm.udims
        
        A = pm.A
        B = pm.B
        Q = pm.Q
        R = pm.R
        init_state = pm.init_state
        
        x_f = np.array([[10], [2], [0], [0]])
        u_f =  np.array([[0], [0]])

        sys = SystemPointMass(xdims, udims, T, A, B, stoch=True)
        robot = InfRobotLTI(sys, init_state, T, Q, R, x_f=x_f, u_f=u_f)
        robot.reg_lti()

        states, controls, costs = robot.rollout(verbose=False)
        
        if i == 0:
            vis = Visualizer()
            vis.set_recording(states)
            vis.set_target(x_f)
            vis.show()

        # print "TOTAL COST: " + str(sum(costs))
        avg_costs.append(sum(costs))

    print "Avg. cost: " + str(np.mean(avg_costs))
Пример #10
0
def train(**kwargs):
    # opt = Config()
    for k, v in kwargs.items():
        setattr(opt, k, v)
    vis = Visualizer(opt.env, opt.port)
    device = t.device('cuda') if opt.use_gpu else t.device('cpu')
    lr = opt.lr

    #网络配置
    featurenet = FeatureNet(4, 5)
    if opt.model_path:
        featurenet.load_state_dict(
            t.load(opt.model_path, map_location=lambda _s, _: _s))
    featurenet.to(device)

    #加载数据
    data_set = dataset.FeatureDataset(root=opt.data_root,
                                      train=True,
                                      test=False)
    dataloader = DataLoader(data_set,
                            batch_size=opt.batch_size,
                            shuffle=True,
                            num_workers=opt.num_workers)
    val_dataset = dataset.FeatureDataset(root=opt.data_root,
                                         train=False,
                                         test=False)
    val_dataloader = DataLoader(val_dataset,
                                opt.batch_size,
                                shuffle=False,
                                num_workers=opt.num_workers)
    #定义优化器和随时函数
    optimizer = t.optim.SGD(featurenet.parameters(), lr)
    criterion = t.nn.CrossEntropyLoss().to(device)

    #计算重要指标
    loss_meter = AverageValueMeter()

    #开始训练
    for epoch in range(opt.max_epoch):
        loss_meter.reset()
        for ii, (data, label) in enumerate(dataloader):
            feature = data.to(device)
            target = label.to(device)

            optimizer.zero_grad()
            prob = featurenet(feature)
            # print(prob)
            # print(target)
            loss = criterion(prob, target)
            loss.backward()
            optimizer.step()
            loss_meter.add(loss.item())

            if (ii + 1) % opt.plot_every:
                vis.plot('train_loss', loss_meter.value()[0])
                if os.path.exists(opt.debug_file):
                    import ipdb
                    ipdb.set_trace()
        t.save(
            featurenet.state_dict(),
            'checkpoints/{epoch}_{time}_{loss}.pth'.format(
                epoch=epoch,
                time=time.strftime('%m%d_%H_%M_%S'),
                loss=loss_meter.value()[0]))

        #验证和可视化
        accu, loss = val(featurenet, val_dataloader, criterion)
        featurenet.train()
        vis.plot('val_loss', loss)
        vis.log('epoch: {epoch}, loss: {loss}, accu: {accu}'.format(
            epoch=epoch, loss=loss, accu=accu))

        lr = lr * 0.9
        for param_group in optimizer.param_groups:
            param_group['lr'] = lr
Пример #11
0
    variance2 = []

    for epsilon in epsilons:
        name_config = config_file_name + '{:.2f}'.format(epsilon)[2:] + pklf
        name_data = data_file_name + '{:.2f}'.format(epsilon)[2:] + csvf

        solver = BayesianLearner(name_config, name_data)
        # print(solver.P_g)

        solver.traj_Learner()
        print(solver.P_g)
        data1.append(solver.P_g['g1'])
        data2.append(solver.P_g['g2'])

        error1_low.append(abs(solver.P_g_min['g1'] - solver.P_g['g1']))
        error1_high.append(abs(solver.P_g_max['g1'] - solver.P_g['g1']))
        error2_low.append(abs(solver.P_g_min['g2'] - solver.P_g['g2']))
        error2_high.append(abs(solver.P_g_max['g2'] - solver.P_g['g2']))

        variance1.append(25 * np.var(solver.P_g_history['g1']))
        variance2.append(25 * np.var(solver.P_g_history['g2']))

    error1 = [error1_low, error1_high]
    error2 = [error2_low, error2_high]
    # print (variance1, variance2)
    print(error1)
    print(error2)

    VIS = Visualizer()
    # VIS.plot_curve(epsilons, data1, data2, variance1, variance2, 'result')
    VIS.plot_single_curve(epsilons, data1, variance1, 'result_single')
Пример #12
0
def main():
    logging.basicConfig(level=args.loglevel)
    if not args.random:
        np.random.seed(42)

    with open(args.robot_config) as f:
        config = yaml.load(f.read())

    robots, motions = initialize_robots_and_motions(config)
    num_robots = len(robots)

    vis = Visualizer(num_robots, config['motion_parameters']['disturbance'],
                     args.headless)

    pool = multiprocessing.Pool()

    elapsed = 0
    while True:
        # create array of pairs of robots that sent messages
        long_range_measurements = []
        short_range_measurements = []

        for i, (robot, motion) in enumerate(zip(robots, motions)):

            # Ground truth for the robots will be stored elsewhere.
            control_output = robot.get_control_output()
            odometry = motion.apply_control_input(control_output)
            robot.receive_odometry_message(odometry)

        for i in range(num_robots):
            for j in range(i + 1, num_robots):  # No self messages
                robot1 = robots[i]
                robot2 = robots[j]
                motion1 = motions[i]
                motion2 = motions[j]

                # Potentially exchange long / short messages, and log their results
                did_short_range_comm = do_long_range_message(
                    config, robot1, robot2, motion1, motion2)
                did_long_range_comm = do_short_range_message(
                    config, robot1, robot2, motion1, motion2)

                # if we exchanged the messages, add the indices of the pair to the visualizer
                if did_short_range_comm:
                    short_range_measurements.append((i, j))
                if did_long_range_comm:
                    long_range_measurements.append((i, j))

        # Let each robot perform some computation at each time step.
        start_time = time.time()
        if args.multiprocessing:
            robots = pool.map(compute_map, robots)
        else:
            for robot in robots:
                robot.compute()
        end_time = time.time()
        logging.warning("Took %f seconds to perform all computation!",
                        end_time - start_time)

        # Perform visualization update.
        vis.update(robots, motions, short_range_measurements,
                   long_range_measurements)

        # As the final step of the loop, update the timestamp for each robot.
        for robot in robots:
            robot.step(1)

        # Potentially exit the simulation.
        elapsed += 1
        if args.time > 0 and elapsed >= args.time:
            sys.exit(0)

        # Sleep for some amount of time.
        if (args.delay > 0):
            time.sleep(args.delay)
        elif (args.delay < 0):
            input()
Пример #13
0
class Trainer():
    def __init__(self, config):

        # data
        self.train_data = AnnPolygon(config, train=True)
        self.val_data = AnnPolygon(config, train=False)
        self.num_points = config.num_points
        self.gt_num_points = config.gt_num_points

        # model
        self.model = Snake(state_dim=config.batch_size,
                           feature_dim=6,
                           conv_type='dgrid')

        # Run on GPU/CPU
        if torch.cuda.is_available():
            self.device = torch.device(f"cuda:{config.multi_gpu[0]}")
        else:
            self.device = torch.device(f"cpu")

        # check if load from existing model
        if config.reload_model_path:
            self.model.load(config.reload_model_path)
        else:
            self.model.cuda()

        self.train_dataloader = DataLoader(self.train_data,
                                           config.batch_size,
                                           shuffle=True,
                                           num_workers=config.num_workers,
                                           drop_last=True)
        self.val_dataloader = DataLoader(self.val_data,
                                         config.batch_size,
                                         shuffle=True,
                                         num_workers=config.num_workers,
                                         drop_last=True)

        # optimizer
        self.criterion = dist_chamfer_2D.chamfer_2DDist()
        if config.optimizer == "adam":
            self.lr = config.learning_rate
            self.optimizer = Adam(self.model.parameters(), lr=self.lr)
        elif config.optimizer == "sgd":
            self.lr = config.learning_rate / 10
            self.optimizer = SGD(self.model.parameters(), lr=self.lr)

        self.train_loss = meter.AverageValueMeter()
        self.val_loss = meter.AverageValueMeter()

        self.epochs = config.epochs

        self.vis = Visualizer(config)

    def train(self):
        for epoch in range(self.epochs):
            self.train_loss.reset()
            # training iteration
            for i, (curve, GT) in enumerate(self.train_dataloader):
                # load
                GT_points = GT.type(torch.FloatTensor).cuda(device=self.device)
                curve = curve.type(torch.FloatTensor).cuda(device=self.device)
                coodinates = curve[:, :, :2]

                curve = curve.permute(0, 2, 1)
                coodinates = coodinates.permute(0, 2, 1)

                # feed into model
                offset = self.model(curve)
                new_coodinates = offset + coodinates

                dist1, dist2, _, _ = self.criterion(
                    GT_points, new_coodinates.permute(0, 2, 1))
                loss = torch.mean(dist1) / self.num_points + torch.mean(
                    dist2) / self.gt_num_points

                # backward
                self.optimizer.zero_grad()
                loss.backward()
                self.optimizer.step()

                self.train_loss.add(loss.item())
                self.vis.plot('train_loss',
                              self.train_loss.value()[0],
                              i + epoch * len(self.train_data))

            self.model.eval()

            for i, (curve, GT) in enumerate(self.val_dataloader):
                # load data
                GT_points = GT.type(torch.FloatTensor).cuda(device=self.device)
                curve = curve.type(torch.FloatTensor).cuda(device=self.device)
                coodinates = curve[:, :, :2]

                curve = curve.permute(0, 2, 1)
                coodinates = coodinates.permute(0, 2, 1)

                # feed into model
                offset = self.model(curve)
                new_coodinates = offset + coodinates

                dist1, dist2, _, _ = self.criterion(
                    GT_points, new_coodinates.permute(0, 2, 1))
                loss = torch.mean(dist1) / self.num_points + torch.mean(
                    dist2) / self.gt_num_points

                self.val_loss.add(loss.item())
                self.vis.plot('val_loss',
                              self.val_loss.value()[0],
                              i + epoch * len(self.val_data))

            self.model.train()
Пример #14
0
            a[0] = hip_todo[0]
            a[1] = knee_todo[0]
            a[2] = hip_todo[1]
            a[3] = knee_todo[1]
            a = np.clip(0.5 * a, -1.0, 1.0)

            actions[i, :] = a

        fake_actiondist = np.concatenate(
            [np.zeros((n_agents, 4)),
             np.ones((n_agents, 4))])
        return actions, fake_actiondist


if __name__ == '__main__':
    from madrl_environments.walker.multi_walker import MultiWalkerEnv
    from vis import Visualizer
    import pprint
    env = MultiWalkerEnv(n_walkers=3)
    train_args = {'discount': 0.99, 'control': 'decentralized'}
    vis = Visualizer(env, train_args, 500, 1, True, 'heuristic')

    rew, info = vis(None,
                    hpolicy=MultiWalkerHeuristicPolicy(
                        env.agents[0].observation_space,
                        env.agents[0].observation_space))

    pprint.pprint(rew)
    pprint.pprint(info)
Пример #15
0
        # dagger_lr = KernelRidge(kernel='rbf', gamma=100)
        dagger_lr = LinearRegression(fit_intercept=False)#KernelRidge(kernel='rbf')#
        dagger_learner = SKLearner(dagger_lr)
        dagger_trajs, dagger_traj_controls, dagger_costs, dagger_avg_costs, dagger_avg_loss, dagger_accs = trials.dagger_trial(dagger_learner, robot, sys)
        dagger_final_trajs, dagger_final_controls, dagger_final_costs, dagger_final_avg_costs, dagger_final_avg_loss = trials.dagger_final(dagger_learner, robot, sys)

        dagger_data[t, :] = dagger_avg_costs
        dagger_loss_data[t, :] = dagger_avg_loss
        dagger_final_data[t, :] = dagger_final_avg_costs
        dagger_acc_data[t, :] = dagger_accs

    # print im_lr.coef_
    # print dagger_lr.coef_
    # print robot.lqr.K1

    vis = Visualizer()
    vis.show_trajs(sup_trajs, x_f, "sup_trajs", data_directory)
    vis.show_trajs(im_trajs, x_f, "sl_trajs", data_directory)
    vis.show_trajs(dagger_trajs, x_f, "dagger_trajs", data_directory)
    vis.show_trajs(dagger_final_trajs, x_f, "dagger_final_trajs", data_directory)



    print im_accs
    print dagger_accs

    print "\n\n\n"
    for state, control in im_learner.data:
        print control
        print im_learner.predict(state)
        print dagger_learner.predict(state)
Пример #16
0
def train(**kwargs):
    for k_, v_ in kwargs.items():
        setattr(config, k_, v_)

    vis_ = Visualizer()

    # data
    train_dataset = get_data.Ali(config.train_path, 'train',
                                 config.feature_index_path)
    val_dataset = get_data.Ali(config.val_path, 'val',
                               config.feature_index_path)

    train_loader = DataLoader(dataset=train_dataset,
                              batch_size=config.batch_size,
                              shuffle=True,
                              drop_last=True)
    val_loader = DataLoader(dataset=val_dataset, batch_size=config.batch_size)

    # model
    model = deepfm.FNN(config.feature_index_path)
    print(model)

    # print('initializing...')
    # model.apply(weight_init)

    # testing
    if config.test_flag:
        test_dataset = get_data.Ali(config.test_path, 'test',
                                    config.feature_index_path)
        test_loader = DataLoader(dataset=test_dataset,
                                 batch_size=config.batch_size)
        model.load_state_dict(
            torch.load(os.path.join(config.model_path, '_best')))
        test(model, test_loader, config.output_path)

    # criterion and optimizer
    criterion = torch.nn.BCELoss()
    lr = config.lr
    optimizer = Adam(model.parameters(),
                     lr=lr,
                     betas=(config.beta1, config.beta2),
                     weight_decay=config.weight_decay)
    previous_loss = 1e6
    if torch.cuda.is_available():
        model.cuda()
        criterion.cuda()

    # meters
    loss_meter = tnt.meter.AverageValueMeter()
    # class_err = tnt.meter.ClassErrorMeter()
    # confusion_matrix = tnt.meter.ConfusionMeter(2, normalized=True)

    # val(model, val_loader, criterion)
    # resume training
    start = 0
    if config.resume:
        model_epoch = [
            int(fname.split('_')[-1])
            for fname in os.listdir(config.model_path) if 'best' not in fname
        ]
        start = max(model_epoch)
        model.load_state_dict(
            torch.load(os.path.join(config.model_path, '_epoch_{start}')))
    if start >= config.epochs:
        print('Training already Done!')
        return

    # train
    print('start training...')
    for i in range(start, config.epochs):
        loss_meter.reset()
        # class_err.reset()
        # confusion_matrix.reset()
        for ii, (c_data, labels) in tqdm(enumerate(train_loader)):
            c_data = to_var(c_data)
            labels = to_var(labels).float()
            # labels = labels.view(-1, 1)

            pred = model(c_data)
            # print(pred, labels)
            loss = criterion(pred, labels)
            optimizer.zero_grad()
            loss.backward()
            optimizer.step()

            # meters update and visualize
            loss_meter.add(loss.data[0])
            # confusion_matrix.add(pred.data.squeeze(), labels.data.type(torch.LongTensor))

            if (ii + 1) % config.print_every == 0:
                vis_.plot('train_loss', loss_meter.value()[0])
                print(
                    f'''epochs: {i + 1}/{config.epochs} batch: {ii + 1}/{len(train_loader)}
							train_loss: {loss.data[0]}''')

        print('evaluating...')
        # train_cm = confusion_matrix.value()
        val_cm, val_accuracy, val_loss = val(model, val_loader, criterion)
        vis_.plot('val_loss', val_loss)
        vis_.log(f"epoch:{start + 1},lr:{lr},loss:{val_loss}")

        torch.save(model.state_dict(),
                   os.path.join(config.model_path, f'_epoch_{i}'))

        # update learning rate
        if loss_meter.value()[0] > previous_loss:
            torch.save(model.state_dict(),
                       os.path.join(config.model_path, '_best'))
            lr = lr * config.lr_decay
            for param_group in optimizer.param_groups:
                param_group['lr'] = lr
        previous_loss = loss_meter.value()[0]
Пример #17
0
def main():
    parser = argparse.ArgumentParser()

    default_dataset = 'toy-data.npz'
    parser.add_argument('--data', default=default_dataset,
                        help='data file')
    parser.add_argument('--seed', type=int, default=None,
                        help='random seed. Randomly set if not specified.')

    # training options
    parser.add_argument('--nz', type=int, default=32,
                        help='dimension of latent variable')
    parser.add_argument('--epoch', type=int, default=1000,
                        help='number of training epochs')
    parser.add_argument('--batch-size', type=int, default=128,
                        help='batch size')
    parser.add_argument('--lr', type=float, default=1e-4,
                        help='learning rate')
    parser.add_argument('--min-lr', type=float, default=5e-5,
                        help='min learning rate for LR scheduler. '
                             '-1 to disable annealing')
    parser.add_argument('--plot-interval', type=int, default=10,
                        help='plot interval. 0 to disable plotting.')
    parser.add_argument('--save-interval', type=int, default=0,
                        help='interval to save models. 0 to disable saving.')
    parser.add_argument('--prefix', default='pvae',
                        help='prefix of output directory')
    parser.add_argument('--comp', type=int, default=5,
                        help='continuous convolution kernel size')
    parser.add_argument('--sigma', type=float, default=.2,
                        help='standard deviation for Gaussian likelihood')
    parser.add_argument('--overlap', type=float, default=.5,
                        help='kernel overlap')
    # squash is off when rescale is off
    parser.add_argument('--squash', dest='squash', action='store_const',
                        const=True, default=True,
                        help='bound the generated time series value '
                             'using tanh')
    parser.add_argument('--no-squash', dest='squash', action='store_const',
                        const=False)

    # rescale to [-1, 1]
    parser.add_argument('--rescale', dest='rescale', action='store_const',
                        const=True, default=True,
                        help='if set, rescale time to [-1, 1]')
    parser.add_argument('--no-rescale', dest='rescale', action='store_const',
                        const=False)

    args = parser.parse_args()

    batch_size = args.batch_size
    nz = args.nz

    epochs = args.epoch
    plot_interval = args.plot_interval
    save_interval = args.save_interval

    try:
        npz = np.load(args.data)
        train_data = npz['data']
        train_time = npz['time']
        train_mask = npz['mask']
    except FileNotFoundError:
        if args.data != default_dataset:
            raise
        # Generate the default toy dataset from scratch
        train_data, train_time, train_mask, _, _ = gen_data(
            n_samples=10000, seq_len=200, max_time=1, poisson_rate=50,
            obs_span_rate=.25, save_file=default_dataset)

    _, in_channels, seq_len = train_data.shape
    train_time *= train_mask

    if args.seed is None:
        rnd = np.random.RandomState(None)
        random_seed = rnd.randint(np.iinfo(np.uint32).max)
    else:
        random_seed = args.seed
    rnd = np.random.RandomState(random_seed)
    np.random.seed(random_seed)
    torch.manual_seed(random_seed)

    # Scale time
    max_time = 5
    train_time *= max_time

    squash = None
    rescaler = None
    if args.rescale:
        rescaler = Rescaler(train_data)
        train_data = rescaler.rescale(train_data)
        if args.squash:
            squash = torch.tanh

    out_channels = 64
    cconv_ref = 98

    train_dataset = TimeSeries(
        train_data, train_time, train_mask, label=None, max_time=max_time,
        cconv_ref=cconv_ref, overlap_rate=args.overlap, device=device)

    train_loader = DataLoader(
        train_dataset, batch_size=batch_size, shuffle=True,
        drop_last=True, collate_fn=train_dataset.collate_fn)
    n_train_batch = len(train_loader)

    test_batch_size = 64
    test_loader = DataLoader(train_dataset, batch_size=test_batch_size,
                             collate_fn=train_dataset.collate_fn)

    grid_decoder = SeqGeneratorDiscrete(in_channels, nz, squash)
    decoder = Decoder(grid_decoder, max_time=max_time).to(device)

    cconv = ContinuousConv1D(
        in_channels, out_channels, max_time, cconv_ref,
        overlap_rate=args.overlap, kernel_size=args.comp, norm=True).to(device)

    encoder = Encoder(nz, cconv).to(device)

    pvae = PVAE(encoder, decoder, sigma=args.sigma).to(device)

    optimizer = optim.Adam(pvae.parameters(), lr=args.lr)

    scheduler = make_scheduler(optimizer, args.lr, args.min_lr, epochs)

    path = '{}_{}_{}'.format(
        args.prefix, datetime.now().strftime('%m%d.%H%M%S'),
        '_'.join([f'lr_{args.lr:g}']))

    output_dir = Path('results') / 'toy-pvae' / path
    print(output_dir)
    log_dir = mkdir(output_dir / 'log')
    model_dir = mkdir(output_dir / 'model')

    start_epoch = 0

    with (log_dir / 'seed.txt').open('w') as f:
        print(random_seed, file=f)
    with (log_dir / 'gpu.txt').open('a') as f:
        print(torch.cuda.device_count(), start_epoch, file=f)
    with (log_dir / 'args.txt').open('w') as f:
        for key, val in sorted(vars(args).items()):
            print(f'{key}: {val}', file=f)

    tracker = Tracker(log_dir, n_train_batch)
    visualizer = Visualizer(encoder, decoder, test_batch_size, max_time,
                            test_loader, rescaler, output_dir, device)
    start = time.time()
    epoch_start = start

    for epoch in range(start_epoch, epochs):
        loss_breakdown = defaultdict(float)
        for val, idx, mask, _, cconv_graph in train_loader:
            optimizer.zero_grad()
            loss = pvae(val, idx, mask, cconv_graph)
            loss.backward()
            optimizer.step()
            loss_breakdown['loss'] += loss.item()

        if scheduler:
            scheduler.step()

        cur_time = time.time()
        tracker.log(
            epoch, loss_breakdown, cur_time - epoch_start, cur_time - start)

        if plot_interval > 0 and (epoch + 1) % plot_interval == 0:
            visualizer.plot(epoch)

        model_dict = {
            'pvae': pvae.state_dict(),
            'epoch': epoch + 1,
            'args': args,
        }
        torch.save(model_dict, str(log_dir / 'model.pth'))
        if save_interval > 0 and (epoch + 1) % save_interval == 0:
            torch.save(model_dict, str(model_dir / f'{epoch:04d}.pth'))

    print(output_dir)
Пример #18
0
class OnlineTracker(object):
    """
    online tracker, has some match
    """
    def __init__(self):
        self.kf = KalmanFilter()
        self.min_ap_dist = 0.64
        self.tracks = []
        self.remove_tracks = []
        self.track_id = 0

        self.vis_tool = Visualizer("MOTDN")

    def match(self, img, detections, features, frm_id):
        # get track state
        is_lost_arr = np.array([track.is_lost for track in self.tracks])
        tracked_track_idx = np.where(is_lost_arr)[0]
        lost_track_idx = np.where(is_lost_arr == False)[0]
        tracked_stracks = map(lambda x: self.tracks[x], tracked_track_idx)
        lost_stracks = map(lambda x: self.tracks[x], lost_track_idx)
        print len(self.tracks)
        self.tracks = []
        # first match, we match active track with detection
        ## 1 匹配跟踪的轨迹
        dists = matching.nearest_reid_distance(tracked_stracks,
                                               detections,
                                               features,
                                               metric='euclidean')
        # dist不参与运算 只是起到gating的作用 滤除过长的轨迹
        dists = matching.gate_cost_matrix(self.kf, dists, tracked_stracks,
                                          detections)
        # match has format (track_id, det_id)
        matches, u_track, u_detection = matching.linear_assignment(
            dists, thresh=self.min_ap_dist)
        for itracked, idet in matches:
            print "first match is ", tracked_stracks[itracked].track_id
            tracked_stracks[itracked].update(detections[idet], features[idet],
                                             frm_id, self.kf)
            self.tracks.append(tracked_stracks[itracked])
        detections = [detections[idet] for idet in u_detection]
        features = [features[idet] for idet in u_detection]
        ## 2 匹配消失的轨迹
        dists = matching.nearest_reid_distance(lost_stracks,
                                               detections,
                                               features,
                                               metric='euclidean')
        dists = matching.gate_cost_matrix(self.kf, dists, lost_stracks,
                                          detections)
        matches, u_lost, u_detection = matching.linear_assignment(
            dists, thresh=self.min_ap_dist)
        for itracked, idet in matches:
            print "second match is ", lost_stracks[itracked].track_id
            lost_stracks[itracked].update(detections[idet], features[idet],
                                          frm_id, self.kf)
            self.tracks.append(lost_stracks[itracked])
        ## 3 1中未匹配的轨迹继续匹配
        ## 匹配方式改为IOU匹配
        detections = [detections[i] for i in u_detection]
        features = [features[idet] for idet in u_detection]
        r_tracked_stracks = [tracked_stracks[idx] for idx in u_track]
        dists = matching.iou_distance(r_tracked_stracks, detections)
        matches, u_track, u_detection = matching.linear_assignment(dists,
                                                                   thresh=0.7)
        for itracked, idet in matches:
            print "third match is ", r_tracked_stracks[itracked].track_id
            r_tracked_stracks[itracked].update(detections[idet],
                                               features[idet], frm_id, self.kf)
            self.tracks.append(r_tracked_stracks[itracked])
        # 未匹配到的更新
        for idx in u_track:
            r_tracked_stracks[idx].update(frm_id=frm_id, kalman_filter=self.kf)
            self.tracks.append(r_tracked_stracks[idx])
        detections = [detections[i] for i in u_detection]
        features = [features[idet] for idet in u_detection]
        ## 4 2中未匹配的轨迹继续匹配
        r_lost_stracks = [lost_stracks[idx] for idx in u_lost]
        dists = matching.iou_distance(r_lost_stracks, detections)
        matches, u_unconfirmed, u_detection = matching.linear_assignment(
            dists, thresh=0.7)
        for itracked, idet in matches:
            print "forth match is ", r_lost_stracks[itracked].track_id
            r_lost_stracks[itracked].update(detections[idet], features[idet],
                                            frm_id, self.kf)
            self.tracks.append(r_lost_stracks[itracked])
        # check u_unconfirmed and delete it if satisfy
        for idx in u_unconfirmed:
            r_lost_stracks[idx].update(frm_id=frm_id, kalman_filter=self.kf)
            if r_lost_stracks[idx].age >= P['max_lost_track_time']:
                continue
            self.tracks.append(r_lost_stracks[idx])
        detections = [detections[i] for i in u_detection]
        features = [features[idet] for idet in u_detection]
        # 生成新的轨迹
        for det, fea in zip(detections, features):
            self.tracks.append(
                BaseTrack(det, fea, frm_id, self.track_id, self.kf))
            self.track_id += 1

    def vis_track(self, img):
        # raw_input()
        show_thresh = 1
        track_pos_list = [
            track.curr_pos.astype(np.int32) for track in self.tracks
            if track.age < show_thresh
        ]
        track_color_list = [
            track.color for track in self.tracks if track.age < show_thresh
        ]
        track_id_list = [
            track.track_id for track in self.tracks if track.age < show_thresh
        ]
        track_conf_list = [
            0.4 for track in self.tracks if track.age < show_thresh
        ]
        self.vis_tool.image_track(img, track_id_list, track_pos_list,
                                  track_color_list, track_conf_list, "track")
Пример #19
0
def main():
    parser = argparse.ArgumentParser()

    default_dataset = 'toy-data.npz'
    parser.add_argument('--data', default=default_dataset, help='data file')
    parser.add_argument('--seed',
                        type=int,
                        default=None,
                        help='random seed. Randomly set if not specified.')

    # training options
    parser.add_argument('--nz',
                        type=int,
                        default=32,
                        help='dimension of latent variable')
    parser.add_argument('--epoch',
                        type=int,
                        default=1000,
                        help='number of training epochs')
    parser.add_argument('--batch-size',
                        type=int,
                        default=128,
                        help='batch size')
    parser.add_argument('--lr',
                        type=float,
                        default=8e-5,
                        help='encoder/decoder learning rate')
    parser.add_argument('--dis-lr',
                        type=float,
                        default=1e-4,
                        help='discriminator learning rate')
    parser.add_argument('--min-lr',
                        type=float,
                        default=5e-5,
                        help='min encoder/decoder learning rate for LR '
                        'scheduler. -1 to disable annealing')
    parser.add_argument('--min-dis-lr',
                        type=float,
                        default=7e-5,
                        help='min discriminator learning rate for LR '
                        'scheduler. -1 to disable annealing')
    parser.add_argument('--wd', type=float, default=0, help='weight decay')
    parser.add_argument('--overlap',
                        type=float,
                        default=.5,
                        help='kernel overlap')
    parser.add_argument('--no-norm-trans',
                        action='store_true',
                        help='if set, use Gaussian posterior without '
                        'transformation')
    parser.add_argument('--plot-interval',
                        type=int,
                        default=1,
                        help='plot interval. 0 to disable plotting.')
    parser.add_argument('--save-interval',
                        type=int,
                        default=0,
                        help='interval to save models. 0 to disable saving.')
    parser.add_argument('--prefix',
                        default='pbigan',
                        help='prefix of output directory')
    parser.add_argument('--comp',
                        type=int,
                        default=7,
                        help='continuous convolution kernel size')
    parser.add_argument('--ae',
                        type=float,
                        default=.2,
                        help='autoencoding regularization strength')
    parser.add_argument('--aeloss',
                        default='smooth_l1',
                        help='autoencoding loss. (options: mse, smooth_l1)')
    parser.add_argument('--ema',
                        dest='ema',
                        type=int,
                        default=-1,
                        help='start epoch of exponential moving average '
                        '(EMA). -1 to disable EMA')
    parser.add_argument('--ema-decay',
                        type=float,
                        default=.9999,
                        help='EMA decay')
    parser.add_argument('--mmd',
                        type=float,
                        default=1,
                        help='MMD strength for latent variable')

    # squash is off when rescale is off
    parser.add_argument('--squash',
                        dest='squash',
                        action='store_const',
                        const=True,
                        default=True,
                        help='bound the generated time series value '
                        'using tanh')
    parser.add_argument('--no-squash',
                        dest='squash',
                        action='store_const',
                        const=False)

    # rescale to [-1, 1]
    parser.add_argument('--rescale',
                        dest='rescale',
                        action='store_const',
                        const=True,
                        default=True,
                        help='if set, rescale time to [-1, 1]')
    parser.add_argument('--no-rescale',
                        dest='rescale',
                        action='store_const',
                        const=False)

    args = parser.parse_args()

    batch_size = args.batch_size
    nz = args.nz

    epochs = args.epoch
    plot_interval = args.plot_interval
    save_interval = args.save_interval

    try:
        npz = np.load(args.data)
        train_data = npz['data']
        train_time = npz['time']
        train_mask = npz['mask']
    except FileNotFoundError:
        if args.data != default_dataset:
            raise
        # Generate the default toy dataset from scratch
        train_data, train_time, train_mask, _, _ = gen_data(
            n_samples=10000,
            seq_len=200,
            max_time=1,
            poisson_rate=50,
            obs_span_rate=.25,
            save_file=default_dataset)

    _, in_channels, seq_len = train_data.shape
    train_time *= train_mask

    if args.seed is None:
        rnd = np.random.RandomState(None)
        random_seed = rnd.randint(np.iinfo(np.uint32).max)
    else:
        random_seed = args.seed
    rnd = np.random.RandomState(random_seed)
    np.random.seed(random_seed)
    torch.manual_seed(random_seed)

    # Scale time
    max_time = 5
    train_time *= max_time

    squash = None
    rescaler = None
    if args.rescale:
        rescaler = Rescaler(train_data)
        train_data = rescaler.rescale(train_data)
        if args.squash:
            squash = torch.tanh

    out_channels = 64
    cconv_ref = 98

    train_dataset = TimeSeries(train_data,
                               train_time,
                               train_mask,
                               label=None,
                               max_time=max_time,
                               cconv_ref=cconv_ref,
                               overlap_rate=args.overlap,
                               device=device)

    train_loader = DataLoader(train_dataset,
                              batch_size=batch_size,
                              shuffle=True,
                              drop_last=True,
                              collate_fn=train_dataset.collate_fn)
    n_train_batch = len(train_loader)

    time_loader = DataLoader(train_dataset,
                             batch_size=batch_size,
                             shuffle=True,
                             drop_last=True,
                             collate_fn=train_dataset.collate_fn)

    test_loader = DataLoader(train_dataset,
                             batch_size=batch_size,
                             collate_fn=train_dataset.collate_fn)

    grid_decoder = SeqGeneratorDiscrete(in_channels, nz, squash)
    decoder = Decoder(grid_decoder, max_time=max_time).to(device)

    cconv = ContinuousConv1D(in_channels,
                             out_channels,
                             max_time,
                             cconv_ref,
                             overlap_rate=args.overlap,
                             kernel_size=args.comp,
                             norm=True).to(device)
    encoder = Encoder(cconv, nz, not args.no_norm_trans).to(device)

    pbigan = PBiGAN(encoder, decoder, args.aeloss).to(device)

    critic_cconv = ContinuousConv1D(in_channels,
                                    out_channels,
                                    max_time,
                                    cconv_ref,
                                    overlap_rate=args.overlap,
                                    kernel_size=args.comp,
                                    norm=True).to(device)
    critic = ConvCritic(critic_cconv, nz).to(device)

    ema = None
    if args.ema >= 0:
        ema = EMA(pbigan, args.ema_decay, args.ema)

    optimizer = optim.Adam(pbigan.parameters(),
                           lr=args.lr,
                           weight_decay=args.wd)
    critic_optimizer = optim.Adam(critic.parameters(),
                                  lr=args.dis_lr,
                                  weight_decay=args.wd)

    scheduler = make_scheduler(optimizer, args.lr, args.min_lr, epochs)
    dis_scheduler = make_scheduler(critic_optimizer, args.dis_lr,
                                   args.min_dis_lr, epochs)

    path = '{}_{}'.format(args.prefix, datetime.now().strftime('%m%d.%H%M%S'))

    output_dir = Path('results') / 'toy-pbigan' / path
    print(output_dir)
    log_dir = mkdir(output_dir / 'log')
    model_dir = mkdir(output_dir / 'model')

    start_epoch = 0

    with (log_dir / 'seed.txt').open('w') as f:
        print(random_seed, file=f)
    with (log_dir / 'gpu.txt').open('a') as f:
        print(torch.cuda.device_count(), start_epoch, file=f)
    with (log_dir / 'args.txt').open('w') as f:
        for key, val in sorted(vars(args).items()):
            print(f'{key}: {val}', file=f)

    tracker = Tracker(log_dir, n_train_batch)
    visualizer = Visualizer(encoder, decoder, batch_size, max_time,
                            test_loader, rescaler, output_dir, device)
    start = time.time()
    epoch_start = start

    for epoch in range(start_epoch, epochs):
        loss_breakdown = defaultdict(float)

        for ((val, idx, mask, _, cconv_graph),
             (_, idx_t, mask_t, index, _)) in zip(train_loader, time_loader):

            z_enc, x_recon, z_gen, x_gen, ae_loss = pbigan(
                val, idx, mask, cconv_graph, idx_t, mask_t)

            cconv_graph_gen = train_dataset.make_graph(x_gen, idx_t, mask_t,
                                                       index)

            real = critic(cconv_graph, batch_size, z_enc)
            fake = critic(cconv_graph_gen, batch_size, z_gen)

            D_loss = gan_loss(real, fake, 1, 0)

            critic_optimizer.zero_grad()
            D_loss.backward(retain_graph=True)
            critic_optimizer.step()

            G_loss = gan_loss(real, fake, 0, 1)

            mmd_loss = mmd(z_enc, z_gen)

            loss = G_loss + ae_loss * args.ae + mmd_loss * args.mmd

            optimizer.zero_grad()
            loss.backward()
            optimizer.step()

            if ema:
                ema.update()

            loss_breakdown['D'] += D_loss.item()
            loss_breakdown['G'] += G_loss.item()
            loss_breakdown['AE'] += ae_loss.item()
            loss_breakdown['MMD'] += mmd_loss.item()
            loss_breakdown['total'] += loss.item()

        if scheduler:
            scheduler.step()
        if dis_scheduler:
            dis_scheduler.step()

        cur_time = time.time()
        tracker.log(epoch, loss_breakdown, cur_time - epoch_start,
                    cur_time - start)

        if plot_interval > 0 and (epoch + 1) % plot_interval == 0:
            if ema:
                ema.apply()
                visualizer.plot(epoch)
                ema.restore()
            else:
                visualizer.plot(epoch)

        model_dict = {
            'pbigan': pbigan.state_dict(),
            'critic': critic.state_dict(),
            'ema': ema.state_dict() if ema else None,
            'epoch': epoch + 1,
            'args': args,
        }
        torch.save(model_dict, str(log_dir / 'model.pth'))
        if save_interval > 0 and (epoch + 1) % save_interval == 0:
            torch.save(model_dict, str(model_dir / f'{epoch:04d}.pth'))

    print(output_dir)
Пример #20
0
 def setup_vis(self):
     return Visualizer(self.x_min, self.x_max, self.y_min, self.y_max,
                       self.map)
Пример #21
0
            self.rob.observeProcCached()
            self.blockMem.updateBlocks(self.rob)
            self.kb.update()
            self.visualize()
            acts, running = self.goal.cycle()
            for act in acts:
                self.rob.sendCommand(act)
        acts = self.goal.stop()
        for act in acts:
            self.rob.sendCommand(act)


if __name__ == '__main__':
    SCALE = 3
    setup_logger()
    visualizer = Visualizer()
    visualizer.start()
    video_producer = mb.VideoProducer(width=320 * SCALE,
                                      height=240 * SCALE,
                                      want_depth=False)
    agent_handlers = mb.AgentHandlers(video_producer=video_producer)
    miss = mb.MissionXML(agentSections=[
        mb.AgentSection(
            name='Robo',
            agenthandlers=agent_handlers,
        )
    ])

    world = mb.defaultworld(forceReset="true", seed="151")
    #113 122 127? 128 129+? 130+? 131+?
    miss.setWorld(world)
Пример #22
0
 def setup_vis(self):
     return Visualizer(self.x_min, self.x_max, self.y_min, self.y_max,
                       self.obstacles)
Пример #23
0
from BayesianLearner import BayesianLearner
from vis import Visualizer
import numpy as np

if __name__ == '__main__':
    config_file_name = "graphconfig"
    pklf = ".pkl"
    data_file_name = "samples"
    csvf = ".csv"

    epsilon = 0.00

    name_config = config_file_name + '{:.2f}'.format(epsilon)[2:] + pklf
    name_data = data_file_name + '{:.2f}'.format(epsilon)[2:] + csvf

    solver = BayesianLearner(name_config, name_data)
    # print(solver.P_g)

    convergence = solver.traj_Learner(early_stop=2)

    epsilon = 0.27
    name_config_ = config_file_name + '{:.2f}'.format(epsilon)[2:] + pklf
    name_data_ = data_file_name + '{:.2f}'.format(epsilon)[2:] + csvf

    solver_ = BayesianLearner(name_config_, name_data_)
    convergence_ = solver_.traj_Learner(early_stop=2)

    VIS = Visualizer()
    VIS.plot_trajs_compare(convergence, convergence_, 'test')
Пример #24
0
    A = pm.A
    B = pm.B
    Q = pm.Q
    R = pm.R
    init_state = pm.init_state
    
    x_f = np.array([[0], [0], [0], [0]])#x_f = np.array([[10], [2], [0], [0]])
    u_f =  np.array([[0], [0]])

    sys = SystemPointMass(xdims, udims, T, A, B, stoch=True)
    robot = InfRobotLTI(sys, init_state, T, Q, R, x_f=x_f, u_f=u_f)
    robot.reg_lti()

    sup_states, sup_controls, sup_costs = robot.rollout(verbose=False)
    
    vis = Visualizer()
    vis.set_recording(sup_states)
    vis.set_target(x_f)
    vis.show()

    print "LQR cost: " + str(sum(sup_costs))

    """lr = LinearRegression(fit_intercept=False)
    learner = SKLearner(lr)
    for i in range(4):
        learner.add(states[i], controls[i])
    learner.fit()
    print "Fitting score: " + str(learner.score())
    print "\nLearner: "
    print learner.estimator.coef_
    print "\nLQR: "