예제 #1
0
파일: gmm_train.py 프로젝트: gcheron/DT
def main(argv):
    # read in arguments
    args = sys.argv[1:]
    if len(args) > 0 and args[0] in ("--help", "-h"):
        print HELP_USAGE
        return
    assert len(args) == 3, "wrong number of command parameters!"

    featDir = args[0]
    k = int(args[1])
    gmmDir = args[2]

    trainMat = np.load(featDir).astype(np.float32)
    trainNum, featNum = np.shape(trainMat)
    flags = yael.GMM_FLAGS_W
    niter = 20

    gmm = yael.gmm_learn(
        featNum,
        trainNum,
        k,
        niter,
        yael.FloatArray.acquirepointer(yael.numpy_to_fvec(trainMat)),
        1,
        random.randrange(1000000),
        8,
        flags,
    )
    f = open(gmmDir, "w")
    yael.gmm_write(gmm, f)
    del gmm
예제 #2
0
def writeXvecs(points, filename):
    if type(points) is not np.ndarray:
        raise Exception('Convert to numpy before serializing!')
    dim = points.shape[1]
    count = points.shape[0]
    extension = filename.strip().split('.')[-1]
    if extension == 'fvecs':
        points = yael.numpy_to_fvec(points.astype('float32'))
        yael.fvecs_write(filename, dim, count, points)
    elif extension == 'bvecs':
        file = open(filename, 'wb')
        #raise Exception('Writing of bvecs is not implemented yet!')
        dimData = struct.pack('i', dim)
        for i in xrange(count):
            point = points[i,:].astype('uint8')
            file.write(dimData)
            point.tofile(file)
        file.close()
    elif extension == 'i8vecs':
        file = open(filename, 'wb')
        dimData = struct.pack('i', dim)
        for i in xrange(count):
            point = points[i,:].astype('int8')
            file.write(dimData)
            point.tofile(file)
        file.close()
    elif extension == 'ivecs':
        points = yael.numpy_to_ivec(points)
        yael.ivecs_write(filename, dim, count, points)
    else:
        raise Exception('Bad file extension!')
예제 #3
0
def writeXvecs(points, filename):
    if type(points) is not np.ndarray:
        raise Exception('Convert to numpy before serializing!')
    dim = points.shape[1]
    count = points.shape[0]
    extension = filename.strip().split('.')[-1]
    if extension == 'fvecs':
        points = yael.numpy_to_fvec(points.astype('float32'))
        yael.fvecs_write(filename, dim, count, points)
    elif extension == 'bvecs':
        file = open(filename, 'wb')
        dimData = struct.pack('i', dim)
        for i in xrange(count):
            point = points[i, :].astype('uint8')
            file.write(dimData)
            point.tofile(file)
        file.close()
    elif extension == 'i8vecs':
        file = open(filename, 'wb')
        dimData = struct.pack('i', dim)
        for i in xrange(count):
            point = points[i, :].astype('int8')
            file.write(dimData)
            point.tofile(file)
        file.close()
    elif extension == 'ivecs':
        points = yael.numpy_to_ivec(points)
        yael.ivecs_write(filename, dim, count, points)
    else:
        raise Exception('Bad file extension!')
예제 #4
0
    def initYaelGmm(self):
        self.yael_gmm = yael.gmm_t()
        self.yael_gmm.d = self.n_features
        self.yael_gmm.k = self.n_components

        self.yael_gmm.mu = yael.numpy_to_fvec_ref(self.means_)
        self.yael_gmm.sigma = yael.numpy_to_fvec(self.covars_)
        self.yael_gmm.w = yael.numpy_to_fvec_ref(self.weights_)
예제 #5
0
def writeXvecsToOpenFile(points, file, extension):
    if type(points) is not np.ndarray:
        raise Exception('Convert to numpy before serializing!')
    dim = points.shape[1]
    count = points.shape[0]
    if extension == 'fvecs':
        points = yael.numpy_to_fvec(points.astype('float32'))
        yael.fvecs_fwrite(file, dim, count, points)
    elif extension == 'bvecs':
        raise Exception('Writing of bvecs is not implemented yet!')
    elif extension == 'ivecs':
        points = yael.numpy_to_ivec(points)
        yael.ivecs_fwrite(file, dim, count, points)
    else:
        raise Exception('Bad file extension!')
예제 #6
0
def writeXvecsToOpenFile(points, file, extension):
    if type(points) is not np.ndarray:
        raise Exception('Convert to numpy before serializing!')
    dim = points.shape[1]
    count = points.shape[0]
    if extension == 'fvecs':
        points = yael.numpy_to_fvec(points.astype('float32'))
        yael.fvecs_fwrite(file, dim, count, points)
    elif extension == 'bvecs':
        raise Exception('Writing of bvecs is not implemented yet!')
    elif extension == 'ivecs':
        points = yael.numpy_to_ivec(points)
        yael.ivecs_fwrite(file, dim, count, points)
    else:
        raise Exception('Bad file extension!')
예제 #7
0
    def yaelFV(self, patches, improved=True):
        K = self.gmm.n_components
        N, d = patches.shape

        flags = yael.GMM_FLAGS_MU | yael.GMM_FLAGS_SIGMA
        v = yael.numpy_to_fvec(patches)
        out = yael.fvec_new_0(2 * K * d)
        self.gmm.initYaelGmm()
        yael.gmm_fisher(patches.shape[0], v, self.gmm.yael_gmm, flags, out)
        vector = yael.fvec_to_numpy_acquire(out, 2 * K * d)

        if improved:
            # Signed square-rooting
            vector = np.sign(vector) * np.sqrt(np.abs(vector))

            # L2 normalization
            vector /= np.linalg.norm(vector)

        return vector
예제 #8
0
from yael import yael
import numpy as np

print('Testing Yael <-> numpy interface')

if 'fvec_to_numpy' not in dir(yael):
    #globals():
    print('Numpy interface not compiled in')
    sys.exit(1)

print('float array')
numpy_a = np.array(list(range(5)), dtype='float32')
print(numpy_a)

print('-> Yael A')
yael_a = yael.FloatArray.acquirepointer(yael.numpy_to_fvec(numpy_a))
n = numpy_a.size
yael.fvec_print(yael_a, n)

print('-> Numpy A')
print(yael.fvec_to_numpy(yael_a, n))
print('int array')
numpy_a = np.array(list(range(5)), dtype='int32')
print(numpy_a)

print('-> Yael A2')
yael_a = yael.IntArray.acquirepointer(yael.numpy_to_ivec(numpy_a))
n = numpy_a.size
yael.ivec_print(yael_a, n)

print('-> Numpy A2')