% Loading libraries
addpath('./cifar10');
addpath('./libsvm-3.21/windows');
addpath('./vlfeat-0.9.20');

% Loading training and testing sets
tr_meta = load('./cifar10/batches.meta.mat');
tr_set = load('./cifar10/data_batch_1.mat');
test_set = load('./cifar10/test_batch.mat');

% 
tr_set_data = tr_set.data(1 : 100 : end, :);
tr_set_data = reshape(tr_set_data, [100, 1024, 3] );
tr_set_data = rgb2gray(tr_set_data);
tr_set_labels = tr_set.labels(1 : 100 : end, :);

test_set_data = test_set.data(1 : 100 : end, :);
test_set_data = reshape(test_set_data, [100, 1024, 3] );
test_set_data = rgb2gray(test_set_data);
test_set_labels = test_set.labels(1 : 100 : end, :);

svm_options = ['-s 0 -t 2 -q -h 1 -b 1 -v 5 -c ', num2str( C ) , 'g', num2str( G ) ];

[C, G] = gridsearch(tr_set.labels, tr_set.data);
svm_struct = svmtrain( tr_set_labels, tr_set_data, svm_options );
[ ~ , acc_1, ~ ] = svmpredict( test_set_data, test_set_labels, svm_struct, svm_options );

tr_hog = double( vl_hog( im2single(tr_set_data), 16 ) );
svm_struct_hog = svmtrain( tr_set_labels, tr_hog, svm_options );
test_hog = vl_hog( im2single(test_set_data), 16 );
[ ~, acc_2, ~ ] = svmpredict( double(test_hog), test_set_labels, svm_struct_hog, svm_options );

