class NormalIntermediateFeature(Filter): def __init__(self, filter_size, input_size, scales, features, orientations, folder_name, mode): self.filter_size = filter_size # size of patch self.input_size = input_size self.orientations = orientations # number of orientation self.scales = scales self.features = features self.folder_name = folder_name self.mode = mode def compute_s2(self, input_layer, output_layer): class_number = 1 data_number = 1 exi1 = path.isdir(self.folder_name + "/" + str(class_number) + "_" + str(data_number) + "_" + str(self.input_size)) print "\n", "normal_s2" while exi1: exi2 = path.isdir(self.folder_name + "/" + str(class_number) + "_" + str(data_number) + "_" + str(self.input_size)) while exi2: self.prototype = Layer(self.filter_size, self.scales, self.orientations, "learning_s2", self.features, self.filter_size, input_layer) self.prototype.set_layer( self.folder_name, str(class_number) + "_" + str(data_number) + "_" + str(self.input_size)) print "feature set " + str(class_number) + "_" + str( data_number) self.compute_layer(input_layer, output_layer) data_number += 1 exi2 = path.isdir(self.folder_name + "/" + str(class_number) + "_" + str(data_number) + "_" + str(self.input_size)) data_number = 1 class_number += 1 exi1 = path.isdir(self.folder_name + "/" + str(class_number) + "_" + str(data_number) + "_" + str(self.input_size)) def compute_unit(self, input_layer, scale, feature, x, y, orientation): patch = input_layer.get_array(scale)[0, x:x + self.filter_size, y:y + self.filter_size, orientation] p_patch = self.prototype.get_array(scale)[feature, 0:self.filter_size, 0:self.filter_size, orientation] alpha = (self.filter_size / 4)**2.0 res = np.exp(-np.linalg.norm(p_patch - patch) * 1.0 / (2 * alpha)) return res
class NormalIntermediateFeature(Filter): def __init__(self, filter_size, input_size, scales, features, orientations, folder_name, mode): self.filter_size = filter_size # size of patch self.input_size = input_size self.orientations = orientations # number of orientation self.scales = scales self.features = features self.folder_name = folder_name self.mode = mode def compute_s2(self, input_layer, output_layer): class_number = 1 data_number = 1 exi1 = path.isdir(self.folder_name + "/" + str(class_number) + "_" + str(data_number) + "_" + str(self.input_size)) print "\n", "normal_s2" while exi1: exi2 = path.isdir(self.folder_name + "/" + str(class_number) + "_" + str(data_number) + "_" + str(self.input_size)) while exi2: self.prototype = Layer(self.filter_size, self.scales, self.orientations, "learning_s2", self.features, self.filter_size, input_layer) self.prototype.set_layer(self.folder_name, str(class_number) + "_" + str(data_number) + "_" + str(self.input_size)) print "feature set " + str(class_number) + "_" + str(data_number) self.compute_layer(input_layer, output_layer) data_number += 1 exi2 = path.isdir(self.folder_name + "/" + str(class_number) + "_" + str(data_number) + "_" + str(self.input_size)) data_number = 1 class_number += 1 exi1 = path.isdir(self.folder_name + "/" + str(class_number) + "_" + str(data_number) + "_" + str(self.input_size)) def compute_unit(self, input_layer, scale, feature, x, y, orientation): patch = input_layer.get_array(scale)[0, x:x + self.filter_size, y:y + self.filter_size, orientation] p_patch = self.prototype.get_array(scale)[feature, 0:self.filter_size, 0:self.filter_size, orientation] alpha = (self.filter_size / 4) ** 2.0 res = np.exp(-np.linalg.norm(p_patch - patch) * 1.0 / (2 * alpha)) return res
ns2Layer = Layer(INPUT_SIZE, C1_SCALES, ORIENTATIONS, "normal_s2", FEATURES, PROTOTYPE_SIZE, c1Layer) #print "\nC2 Layer" c2Layer = Layer(PROTOTYPE_SIZE, C1_SCALES, ORIENTATIONS, "c2", FEATURES, 0, ns2Layer) S1.compute_layer(InputLayer, s1Layer) C1.compute_layer(s1Layer, c1Layer) NormalS2.compute_s2(c1Layer, ns2Layer) C2.compute_layer(ns2Layer, c2Layer) vector = [] for s in range(C1_SCALES): #features = c2Layer.get_features(s) for o in range(ORIENTATIONS): vector.extend(c2Layer.get_array(s)[:, 0, 0, o]) print "\n" NormalSVM.predict_class(vector) print "\n", time.time() - start elif mode == "l": start = time.time() S1 = GaborFilter(11, 0.3, 4.0, 1.0, ORIENTATIONS) C1 = LocalInvariance(10, ORIENTATIONS) LearningS2 = LearningIntermediateFeature(PROTOTYPE_SIZE, ORIENTATIONS, FEATURES_FOLDER_NAME) NormalS2 = NormalIntermediateFeature(PROTOTYPE_SIZE, INPUT_SIZE, C1_SCALES, FEATURES, ORIENTATIONS,