Spaces:
Sleeping
Sleeping
Nithya
commited on
Commit
·
d3c7fa1
1
Parent(s):
9272247
updated app to use GPUQuantileTransformer from github
Browse files- app.py +3 -30
- requirements.txt +1 -1
app.py
CHANGED
@@ -5,7 +5,7 @@ debug_mode = '--debug' in sys.argv or os.environ.get('DEBUG') == 'True'
|
|
5 |
|
6 |
if debug_mode:
|
7 |
# Path to the local version of the package
|
8 |
-
local_package_path = "../../GaMaDHaNi"
|
9 |
|
10 |
# Add the local package path to sys.path
|
11 |
sys.path.insert(0, local_package_path)
|
@@ -51,33 +51,6 @@ def debug_profile(func):
|
|
51 |
return pp.profile(sort_by='cumulative', out_lines=10)(func)
|
52 |
return func
|
53 |
|
54 |
-
class GPUQuantileTransformer:
|
55 |
-
'''
|
56 |
-
Temporary hack class to perform inverse quantile transform on GPU
|
57 |
-
'''
|
58 |
-
def __init__(self, qt):
|
59 |
-
# Initialize the sklearn QuantileTransformer
|
60 |
-
self.cpu_transformer = qt
|
61 |
-
self.quantiles_ = torch.Tensor(qt.quantiles_).to(device)
|
62 |
-
self.references_ = torch.Tensor(qt.references_).to(device)
|
63 |
-
|
64 |
-
def transform(self, X):
|
65 |
-
return self.cpu_transformer.transform(X)
|
66 |
-
|
67 |
-
def inverse_transform(self, X):
|
68 |
-
# convert distribution to uniform
|
69 |
-
X = 0.5 * (1 + torch.erf(X / torch.sqrt(torch.tensor(2.0))))
|
70 |
-
# Interpolate using the quantiles and references on GPU
|
71 |
-
idxs = torch.searchsorted(self.references_.view(1, -1), X.view(1, -1)).to(torch.int64)
|
72 |
-
idxs = idxs.view(-1, 1) # to match with the shape of quantiles
|
73 |
-
quantiles_low = torch.gather(self.quantiles_, 0, (idxs - 1).clamp(min=0))
|
74 |
-
quantiles_high = torch.gather(self.quantiles_, 0, idxs.clamp(max=self.quantiles_.size(0) - 1))
|
75 |
-
|
76 |
-
# Linear interpolation between quantiles
|
77 |
-
t = (X - self.references_[idxs - 1]) / (self.references_[idxs] - self.references_[idxs - 1] + 1e-10)
|
78 |
-
X_inv = quantiles_low + t * (quantiles_high - quantiles_low)
|
79 |
-
return X_inv.reshape(1, -1)
|
80 |
-
|
81 |
def predict_voicing(confidence):
|
82 |
# https://github.com/marl/crepe/pull/26
|
83 |
"""
|
@@ -162,7 +135,7 @@ def generate(pitch, num_samples=1, num_steps=100, singers=[3], outfolder='temp',
|
|
162 |
logging.log(logging.INFO, 'Generate function')
|
163 |
# load pitch values onto GPU
|
164 |
pitch = torch.tensor(pitch).float().unsqueeze(0).unsqueeze(0).to(device)
|
165 |
-
pitch_qt = GPUQuantileTransformer(pitch_qt)
|
166 |
logging.log(logging.INFO, 'Generating pitch')
|
167 |
if type == 'response':
|
168 |
pitch, inverted_pitch = generate_pitch_response(pitch, pitch_model, invert_pitch_fn, num_samples=num_samples, num_steps=100)
|
@@ -175,7 +148,7 @@ def generate(pitch, num_samples=1, num_steps=100, singers=[3], outfolder='temp',
|
|
175 |
if pitch_qt is not None:
|
176 |
# if there is not pitch quantile transformer, undo the default quantile transformation that occurs
|
177 |
def undo_qt(x, min_clip=200):
|
178 |
-
pitch= pitch_qt.inverse_transform(x.
|
179 |
pitch = torch.round(pitch) # round to nearest integer, done in preprocessing of pitch contour fed into model
|
180 |
pitch[pitch < 200] = np.nan
|
181 |
return pitch
|
|
|
5 |
|
6 |
if debug_mode:
|
7 |
# Path to the local version of the package
|
8 |
+
local_package_path = "../../GaMaDHaNi-dev"
|
9 |
|
10 |
# Add the local package path to sys.path
|
11 |
sys.path.insert(0, local_package_path)
|
|
|
51 |
return pp.profile(sort_by='cumulative', out_lines=10)(func)
|
52 |
return func
|
53 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
54 |
def predict_voicing(confidence):
|
55 |
# https://github.com/marl/crepe/pull/26
|
56 |
"""
|
|
|
135 |
logging.log(logging.INFO, 'Generate function')
|
136 |
# load pitch values onto GPU
|
137 |
pitch = torch.tensor(pitch).float().unsqueeze(0).unsqueeze(0).to(device)
|
138 |
+
pitch_qt = p2a.GPUQuantileTransformer(pitch_qt, device=device)
|
139 |
logging.log(logging.INFO, 'Generating pitch')
|
140 |
if type == 'response':
|
141 |
pitch, inverted_pitch = generate_pitch_response(pitch, pitch_model, invert_pitch_fn, num_samples=num_samples, num_steps=100)
|
|
|
148 |
if pitch_qt is not None:
|
149 |
# if there is not pitch quantile transformer, undo the default quantile transformation that occurs
|
150 |
def undo_qt(x, min_clip=200):
|
151 |
+
pitch= pitch_qt.inverse_transform(x).squeeze(0) # qt transform expects shape (bs, seq_len, 1)
|
152 |
pitch = torch.round(pitch) # round to nearest integer, done in preprocessing of pitch contour fed into model
|
153 |
pitch[pitch < 200] = np.nan
|
154 |
return pitch
|
requirements.txt
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
crepe==0.0.15
|
2 |
hmmlearn==0.3.2
|
3 |
tensorflow==2.17.0
|
4 |
-
GaMaDHaNi @ git+https://github.com/snnithya/GaMaDHaNi.git@
|
|
|
1 |
crepe==0.0.15
|
2 |
hmmlearn==0.3.2
|
3 |
tensorflow==2.17.0
|
4 |
+
GaMaDHaNi @ git+https://github.com/snnithya/GaMaDHaNi.git@37788f4c900fc425cd193052784e88afbfdd19e2
|