コード例 #1
0
 def train(cls, X, frac, kmax):
     n_samples = X.shape[1]
     n_points = X.shape[0] // 2
     # align shapes
     Y = procrustes(X)
     # compute rigid transform
     R = calc_rigid_basis(Y)
     # project out rigidity
     P = R.T.dot(Y)
     dY = Y - R.dot(P)
     # compute non-rigid transformation
     D = pca(dY, frac, min(kmax, n_samples - 1, n_points - 1))
     k = D.shape[1]
     # combine subspaces
     V = np.concatenate((R, D), axis=1)
     # project raw data onto subspace
     Q = V.T.dot(X)
     # normalize coordinates w.r.t. scale
     for i in xrange(n_samples):
         Q[:, i] /= Q[0, i]
     # compute variance
     e = np.empty(4 + k, dtype=float)
     Q = pow(Q, 2)
     e[:4] = -1  # no clamping for rigid body coefficients
     e[4:] = Q[4:].sum(axis=1) / (n_samples - 1)
     # return model
     return cls(V, e)
コード例 #2
0
ファイル: combined.py プロジェクト: marcovzla/pyaam
    def train(cls, lmks, imgs, ref, frac, kmax):
        smodel = ShapeModel.load('data/shape.npz')
        tmodel = TextureModel.load('data/texture.npz')

        # build diagonal matrix of weights that measures
        # the unit difference between shape and texture parameters
        r = tmodel.variance.sum() / smodel.variance.sum()
        Ws = r * np.eye(smodel.num_modes())

        n_samples = lmks.shape[1]

        tm = TextureMapper(480, 640)

        # create empty matrix
        n_feats = smodel.num_modes() + tmodel.num_modes()
        A = np.empty((n_feats, n_samples))

        # concatenate shape and texture parameters for each training example
        for i in xrange(n_samples):
            img = next(imgs)
            lmk = lmks[:,i]
            sparams = smodel.calc_params(lmk)
            tparams = tmodel.calc_params(img, lmk, ref, tm.warp_triangles)
            # ignore first 4 shape parameters
            A[:,i] = np.concatenate((Ws.dot(sparams[4:]), tparams))

        D = pca(A, frac, kmax)

        # compute variance
        Q = pow(D.T.dot(A), 2)
        e = Q.sum(axis=1) / (n_samples-1)

        return cls(D, e, Ws)
コード例 #3
0
ファイル: combined.py プロジェクト: Noploop/pyaam-1
    def train(cls, lmks, imgs, ref, frac, kmax):
        smodel = ShapeModel.load('data/shape.npz')
        tmodel = TextureModel.load('data/texture.npz')

        # build diagonal matrix of weights that measures
        # the unit difference between shape and texture parameters
        r = tmodel.variance.sum() / smodel.variance.sum()
        Ws = r * np.eye(smodel.num_modes())

        n_samples = lmks.shape[1]

        tm = TextureMapper(480, 640)

        # create empty matrix
        n_feats = smodel.num_modes() + tmodel.num_modes()
        A = np.empty((n_feats, n_samples))

        # concatenate shape and texture parameters for each training example
        for i in xrange(n_samples):
            img = next(imgs)
            lmk = lmks[:, i]
            sparams = smodel.calc_params(lmk)
            tparams = tmodel.calc_params(img, lmk, ref, tm.warp_triangles)
            # ignore first 4 shape parameters
            A[:, i] = np.concatenate((Ws.dot(sparams[4:]), tparams))

        D = pca(A, frac, kmax)

        # compute variance
        Q = pow(D.T.dot(A), 2)
        e = Q.sum(axis=1) / (n_samples - 1)

        return cls(D, e, Ws)
コード例 #4
0
ファイル: shape.py プロジェクト: marcovzla/pyaam
 def train(cls, X, frac, kmax):
     n_samples = X.shape[1]
     n_points = X.shape[0] // 2
     # align shapes
     Y = procrustes(X)
     # compute rigid transform
     R = calc_rigid_basis(Y)
     # project out rigidity
     P = R.T.dot(Y)
     dY = Y - R.dot(P)
     # compute non-rigid transformation
     D = pca(dY, frac, min(kmax, n_samples-1, n_points-1))
     k = D.shape[1]
     # combine subspaces
     V = np.concatenate((R,D), axis=1)
     # project raw data onto subspace
     Q = V.T.dot(X)
     # normalize coordinates w.r.t. scale
     for i in xrange(n_samples):
         Q[:,i] /= Q[0,i]
     # compute variance
     e = np.empty(4+k, dtype=float)
     Q = pow(Q, 2)
     e[:4] = -1  # no clamping for rigid body coefficients
     e[4:] = Q[4:].sum(axis=1) / (n_samples-1)
     # return model
     return cls(V, e)
コード例 #5
0
ファイル: texture.py プロジェクト: zangkaiqiang/py3aam
 def train(cls, lmks, imgs, ref, frac, kmax):
     G = get_data_matrix(imgs, lmks, ref)
     Gm = G.mean(axis=1)
     G -= Gm[:,np.newaxis]
     N = lmks.shape[1]
     D = pca(G, frac, kmax)
     # normalize eigenvectors
     for i in range(D.shape[1]):
         D[:,i] /= np.linalg.norm(D[:,i])
     # compute variance
     Q = D.T.dot(G)
     Q = pow(Q, 2)
     e = Q.sum(axis=1) / (N-1)
     return cls(D, Gm, e)
コード例 #6
0
ファイル: texture.py プロジェクト: marcovzla/pyaam
 def train(cls, lmks, imgs, ref, frac, kmax):
     G = get_data_matrix(imgs, lmks, ref)
     Gm = G.mean(axis=1)
     G -= Gm[:,np.newaxis]
     N = lmks.shape[1]
     D = pca(G, frac, kmax)
     # normalize eigenvectors
     for i in xrange(D.shape[1]):
         D[:,i] /= np.linalg.norm(D[:,i])
     # compute variance
     Q = D.T.dot(G)
     Q = pow(Q, 2)
     e = Q.sum(axis=1) / (N-1)
     return cls(D, Gm, e)