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
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()
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