def main(args):
    dataset_json = args.json
    tuning_layers = []
    if args.tune:
        tuning_layers = args.tune.split(",")
        print tuning_layers
    vgg_path = args.vgg
    max_frames = args.max_frames
    print "Loading VGGNet model. Model type: %s" % args.model

    if args.model == 'average':
        model = AverageFrameModel(vgg_path,
                                  output_neurons=4,
                                  tuning_layers=tuning_layers)
    elif args.model == 'late':
        model = LateFusionModel(vgg_path, output_neurons=4)
    else:
        raise ValueError("Model type must be one of 'average' and 'late'")

    print "Reading data"
    start = datetime.datetime.now()

    tvt_split = [args.train, args.val, args.test]
    data = read_dataset_tvt(dataset_json,
                            sample_probability=0.5,
                            mode='temporal',
                            max_frames=max_frames,
                            mean_value=model.mean_bgr,
                            tvt_split=tvt_split,
                            ids_file=args.ids)
    print "Training data shape:", data["train_X"].shape
    print "Test data shape:", data["test_X"].shape
    print "Validation data shape:", data["val_X"].shape

    end = datetime.datetime.now()
    print "Read data in %d seconds" % (end - start).seconds

    print "---- Training parameters summary -----"
    param_summary(data["train_X"].shape[0], args)
    batch_size = min(args.batch_size, data["train_X"].shape[0])
    print "--------------------------------------"
    solver = Solver(model,
                    data["train_X"],
                    data["train_y"],
                    val_X=data["val_X"],
                    val_y=data["val_y"],
                    model_type=args.model,
                    num_epochs=args.num_epochs,
                    batch_size=batch_size,
                    output_lr=args.output_lr,
                    tune_lr=args.tune_lr,
                    tuning_layers=tuning_layers,
                    reg=args.reg)

    solver.train()
    test_predictions, scores = solver.predict(data["test_X"], data["test_y"])
    write_predictions(args.model, args.ids, test_predictions, scores, args.out)
    print "--------------------------------------"
    print "---- Training parameters summary -----"
    param_summary(data["train_X"].shape[0], args)

    print "---- Loss and accuracy history ----"
    print "Training loss history"
    print solver.train_loss_history
    print "Training accuracy history"
    print solver.train_acc_history
    print "Validation accuracy history"
    print solver.val_acc_history
예제 #2
0
class ClassifierEngine(object):
    def __init__(self, method='fcn', configs=None):

        self.model = None

        if method is 'fcn':
            self.model = FullyConnectedNet(configs['arch'])

        elif method is 'cnn':
            self.model = ConvNet(configs['arch'])

        else:
            raise ValueError('Unrecognized classifier ...')

        self.solver = Solver(self.model, configs['solver'])

    def show_history(self):
        ''' show the history of training process '''

        plt.rcParams['figure.figsize'] = (10.0, 8.0)
        plt.rcParams['image.interpolation'] = 'nearest'
        plt.rcParams['image.cmap'] = 'gray'

        plt.subplot(2, 1, 1)
        plt.plot(self.solver.loss_history)
        plt.xlabel('Iteration')
        plt.ylabel('Loss')
        plt.title('Loss history')

        plt.subplot(2, 1, 2)
        plt.plot(self.solver.train_acc_history, label='train')
        plt.plot(self.solver.val_acc_history, label='val')
        plt.xlabel('Epoch')
        plt.ylabel('Accuracy')
        plt.title('Classification accuracy history')

        fig_version = time.strftime("%Y%m%d%H%M%S",
                                    time.localtime(int(time.time())))
        plt.savefig(
            '../dataset/training_details/loss_curve/training_details_%s.png' %
            fig_version,
            dpi=400)
        # plt.show();
        plt.close()

    def visualize_filters(self):
        ''' visualize the filters '''

        grid = visualize_grid(self.model.params['W1'].transpose(0, 2, 3, 1))
        plt.imshow(grid.astype('uint8'))
        plt.axis('off')
        plt.gcf().set_size_inches(5, 5)
        fig_version = time.strftime("%Y%m%d%H%M%S",
                                    time.localtime(int(time.time())))
        plt.savefig('../dataset/training_details/filters/filters_%s.png' %
                    fig_version,
                    dpi=400)
        # plt.show();
        plt.close()

    def classifier_runner(self, verbose=True):
        '''
        step - 1. train a fcn_classifier
        step - 2. show the training-curve  [-optional-]
        step - 3. predict the test_date
        '''

        self.solver.train()

        self.solver.predict()

        if verbose:
            self.show_history()
            self.visualize_filters()
예제 #3
0
def main(args):
    dataset_json = args.json
    tuning_layers = []
    if args.tune:
        tuning_layers = args.tune.split(",")
        print tuning_layers
    vgg_path = args.vgg
    max_frames = args.max_frames
    print "Loading VGGNet model. Model type: %s" % args.model

    if args.model == 'average':
        model = AverageFrameModel(vgg_path,
                                  output_neurons=4,
                                  tuning_layers=tuning_layers)
    elif args.model == 'late':
        model = LateFusionModel(vgg_path, output_neurons=4)
    else:
        raise ValueError("Model type must be one of 'average' and 'late'")

    print "Reading data"
    start = datetime.datetime.now()

    tvt_split = [args.train, args.val, args.test]
    data = read_dataset_tvt(dataset_json, sample_probability=0.5, mode='temporal', max_frames=max_frames,
                            mean_value=model.mean_bgr, tvt_split=tvt_split, ids_file=args.ids)
    print "Training data shape:", data["train_X"].shape
    print "Test data shape:", data["test_X"].shape
    print "Validation data shape:", data["val_X"].shape

    end = datetime.datetime.now()
    print "Read data in %d seconds" % (end-start).seconds

    print "---- Training parameters summary -----"
    param_summary(data["train_X"].shape[0], args)
    batch_size = min(args.batch_size, data["train_X"].shape[0])
    print "--------------------------------------"
    solver = Solver(model,
                    data["train_X"], data["train_y"],
                    val_X=data["val_X"], val_y=data["val_y"],
                    model_type=args.model,
                    num_epochs=args.num_epochs,
                    batch_size=batch_size,
                    output_lr=args.output_lr,
                    tune_lr=args.tune_lr,
                    tuning_layers=tuning_layers,
                    reg=args.reg)

    solver.train()
    test_predictions, scores = solver.predict(data["test_X"], data["test_y"])
    write_predictions(args.model, args.ids, test_predictions, scores, args.out)
    print "--------------------------------------"
    print "---- Training parameters summary -----"
    param_summary(data["train_X"].shape[0], args)

    print "---- Loss and accuracy history ----"
    print "Training loss history"
    print solver.train_loss_history
    print "Training accuracy history"
    print solver.train_acc_history
    print "Validation accuracy history"
    print solver.val_acc_history