def encodeGMM(method, gmm, data,
normalize=['ssr', 'l2g'], relevance=28, update='wmc',
posteriors=None):
"""
Encoding scheme adapting data from a GMM
parameters:
method: an encoding method to call, currently acceptable
'supervector', 'fisher', 'vlad',
gmm: the background gmm = vocabulary = universal background model
data: typiclly the features, row wise order
normalize: global and local normalization schemes
relevance: (gmm-supervector-specific): relevance factor for mixing
update: (gmm-supervector-specific): which parts to use for mixing
posteriors: if given, they won't be computed again
returns: encoded vector
"""
if posteriors == None:
# compute posteriors from gmm
posteriors = getPosteriors(gmm, data)
if 'supervector' in method:
enc = supervector(gmm, data, posteriors, relevance=relevance,
update=update)
elif 'fisher' in method:
enc = fisherEncode(gmm, data,
posteriors, normalize,
fv_components=update)
elif 'vlad' in method:
enc = vlad(data, gmm.means_, posteriors, gmm.means_.shape[0],
normalize )
else:
raise ValueError('unknown encoding method {}'.format(method))
norm_enc = normalizeEnc(enc, normalize)
return norm_enc
评论列表
文章目录