コード例 #1
0
class LinearRegressor:
    def __init__(self, n, cost=RMSE()):
        self.n = n
        self.w = np.random.randn(n + 1)
        self.normalize = True
        self.cost = cost
        self.scaler = Scaler()

    def preprocess(self, X):
        if self.normalize:
            X = self.scaler.transform(X)
        ones = np.ones(shape=len(X))
        return np.c_[ones, X]

    def predict_preproccessed(self, X):
        return np.dot(X, self.w)

    def predict(self, X):
        if np.sum(X[:, 0] == 1) != X.shape[0]:
            X = self.preprocess(X)
        return self.predict_preproccessed(X)

    def ccost(self, X, y):
        X = self.preprocess(X)
        return self.cost.compute(self.predict_preproccessed(X), y)

    def fit(self, X, y, optimizer, epoch, plot):
        if str(optimizer) == 'equation' or str(optimizer) == 'genetic':
            self.normalize = False

        if str(optimizer) == 'genetic':
            optimizer.pr = lambda X, w: np.dot(X, w)

        self.scaler.fit(X)
        X = self.preprocess(X)

        loss = [self.cost.compute(self.predict_preproccessed(X), y)]
        for _ in range(epoch):
            self.w = optimizer.optimize(X, y, self.w, self.cost)
            loss.append(self.cost.compute(self.predict_preproccessed(X), y))

        if plot:
            plt.xlabel('iterations')
            plt.ylabel('Emperical risk')
            plt.title('Emperical rist optimization')
            plt.plot(np.arange(epoch + 1), loss)
            plt.show()
コード例 #2
0
def embed_imgs(x):
    npload = np.load('data/mean_std2.npz')
    mean, std = npload['mean'], npload['std']
    scaler = Scaler(mean=mean, std=std)

    # model_path = 'data/cnn_model/epoch_232_val_loss1.351451.hdf5'
    # model_emb_path = 'data/emb_model/model_1_epoch_0_test_eer0.114874.hdf5'

    # model_path = 'data/cnn_model/epoch_57_val_loss1.699622.hdf5'
    # model_emb_path = 'data/emb_model/model_2_epoch_25_test_eer0.106689.hdf5'

    # model_path = 'data/cnn_model/epoch_29_val_loss1.441430.hdf5'
    # model_emb_path = 'data/emb_model/model_5_epoch_2_test_eer0.143211.hdf5'
    # model_emb_path = 'data/emb_model/model_6_epoch_6_test_eer_0.135497_test2_err0.254601.hdf5'

    # model_emb_path = '../data/Modeltpe2/epoch_0_test_eer0.139840.hdf5'
    # model_emb_path = '../data/Modeltpe3/epoch_12_test_eer0.107399.hdf5'
    # model_emb_path = 'data/emb_model/model_4_epoch_1_test_eer0.108006.hdf5'

    # model_path = 'data/cnn_model/epoch_16_val_loss1.231896.hdf5'
    # model_emb_path = 'data/emb_model/model_8_epoch_15_test_eer0.127431_test2_err0.218662.hdf5'
    # model_emb_path = 'data/emb_model/model_8_epoch_1_test_eer0.133520_test2_err0.216839.hdf5'
    # model_emb_path = 'data/emb_model/model_9_epoch_5_test_eer0.127574_test2_err0.229637.hdf5'

    model_path = 'data/cnn_model/epoch_66_val_loss1.206078.hdf5'
    model_emb_path = 'data/emb_model/model_10_epoch_10_test_eer0.169731_test2_err0.204908.hdf5'

    model = keras.models.load_model(model_path)
    model_emb = keras.models.load_model(model_emb_path)
    bottleneck = Bottleneck(model)
    x = scaler.transform(x)
    x = bottleneck.predict(transpose_matrix(x))
    x = model_emb.predict(x)

    # model_emb_path = 'data/epoch_17_test_eer0.191621.hdf5'

    # model_emb = keras.models.load_model(model_emb_path)
    # x = scaler.transform(x)
    # x = model_emb.predict(transpose_matrix(x))
    return x
コード例 #3
0
class Recognizer(object):
    def __init__(self):
        self.resize_shape = (100, 100)
        shape_predictor_path = 'data/shape_predictor_68_face_landmarks.dat'
        self.shape_predictor = dlib.shape_predictor(shape_predictor_path)
        self.eye_and_mouth_indices = [39, 42, 57]
        self.template_landmarks = get_template_landmarks(
            self.eye_and_mouth_indices, self.resize_shape[0])
        npload = np.load('data/mean_std2.npz')
        mean, std = npload['mean'], npload['std']
        self.scaler = Scaler(mean=mean, std=std)

        # model_emb_path = 'data/epoch_17_test_eer0.191621.hdf5'

        model_path = 'data/cnn_model/epoch_66_val_loss1.206078.hdf5'
        model_emb_path = 'data/emb_model/model_10_epoch_10_test_eer0.169731_test2_err0.204908.hdf5'

        # model_path = 'data/cnn_model/epoch_16_val_loss1.231896.hdf5'
        # model_emb_path = 'data/emb_model/model_8_epoch_15_test_eer0.127431_test2_err0.218662.hdf5'
        # model_emb_path = 'data/emb_model/model_8_epoch_1_test_eer0.133520_test2_err0.216839.hdf5'
        # model_emb_path = 'data/emb_model/model_9_epoch_5_test_eer0.127574_test2_err0.229637.hdf5'

        # model_path = 'data/cnn_model/epoch_232_val_loss1.351451.hdf5'
        # model_emb_path = 'data/emb_model/model_1_epoch_0_test_eer0.114874.hdf5'
        #
        # model_path = 'data/cnn_model/epoch_57_val_loss1.699622.hdf5'
        # model_emb_path = 'data/emb_model/model_2_epoch_25_test_eer0.106689.hdf5'

        # model_path = 'data/cnn_model/epoch_29_val_loss1.441430.hdf5'
        # model_emb_path = 'data/emb_model/model_5_epoch_2_test_eer0.143211.hdf5'
        # model_emb_path = 'data/emb_model/model_6_epoch_6_test_eer_0.135497_test2_err0.254601.hdf5'

        # model_emb_path = '../data/Modeltpe2/epoch_0_test_eer0.139840.hdf5'
        # model_emb_path = '../data/Modeltpe3/epoch_12_test_eer0.107399.hdf5'
        # model_emb_path = 'data/emb_model/model_4_epoch_1_test_eer0.108006.hdf5'

        model = keras.models.load_model(model_path)
        self.model_emb = keras.models.load_model(model_emb_path)
        self.bottleneck = Bottleneck(model)

        npload = np.load('data/face_base.npz')
        self.x, self.y = npload['x'], npload['y']
        print(self.x.shape, self.y.shape)

        with open('data/labels_dict.pkl', 'rb') as file:
            self.labels_dict = pickle.load(file)

        self.knn = KNeighborsClassifier(n_neighbors=1, metric=metric, n_jobs=1)
        self.knn.fit(self.x, self.y)

    def iterate_similarities(self, emb):
        for i, person_emb in enumerate(self.x):
            sim = person_emb @ emb.T
            yield sim, i

    def predict(self, img, img_gray, rect):
        img = align_img(img, img_gray, rect, self.shape_predictor,
                        self.template_landmarks, self.eye_and_mouth_indices,
                        self.resize_shape)
        batch_x = [img]
        import matplotlib.pyplot as plt
        # plt.imshow(img)
        # plt.show()
        batch_x = self.scaler.transform(batch_x)
        batch_x = self.bottleneck.predict(transpose_matrix(batch_x))
        batch_x = self.model_emb.predict(batch_x)

        # batch_x = self.model_emb.predict(transpose_matrix(batch_x))

        pred_labels = self.knn.predict(batch_x)
        neighbors = self.knn.kneighbors(batch_x)
        label_neighbors = [
            self.labels_dict[self.y[ind]] for ind in neighbors[1][0]
        ]
        print(label_neighbors, neighbors[0])

        # label_ind = max(self.iterate_similarities(batch_x[0]), key=lambda x: x[0])[1]
        # label = self.y[label_ind]
        label = pred_labels[0]
        return self.labels_dict[label], label_neighbors