Update ONNXVITS_infer.py
Browse files- ONNXVITS_infer.py +61 -0
ONNXVITS_infer.py
CHANGED
@@ -91,3 +91,64 @@ class SynthesizerTrn(models.SynthesizerTrn):
|
|
91 |
o = torch.from_numpy(o[0])
|
92 |
|
93 |
return o, attn, y_mask, (z, z_p, m_p, logs_p)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
91 |
o = torch.from_numpy(o[0])
|
92 |
|
93 |
return o, attn, y_mask, (z, z_p, m_p, logs_p)
|
94 |
+
|
95 |
+
def predict_duration(self, x, x_lengths, sid=None, noise_scale=1, length_scale=1, noise_scale_w=1., max_len=None,
|
96 |
+
emotion_embedding=None):
|
97 |
+
from ONNXVITS_utils import runonnx
|
98 |
+
|
99 |
+
#x, m_p, logs_p, x_mask = self.enc_p(x, x_lengths)
|
100 |
+
x, m_p, logs_p, x_mask = runonnx("ONNX_net/enc_p.onnx", x=x.numpy(), x_lengths=x_lengths.numpy())
|
101 |
+
x = torch.from_numpy(x)
|
102 |
+
m_p = torch.from_numpy(m_p)
|
103 |
+
logs_p = torch.from_numpy(logs_p)
|
104 |
+
x_mask = torch.from_numpy(x_mask)
|
105 |
+
|
106 |
+
if self.n_speakers > 0:
|
107 |
+
g = self.emb_g(sid).unsqueeze(-1) # [b, h, 1]
|
108 |
+
else:
|
109 |
+
g = None
|
110 |
+
|
111 |
+
#logw = self.dp(x, x_mask, g=g, reverse=True, noise_scale=noise_scale_w)
|
112 |
+
logw = runonnx("ONNX_net/dp.onnx", x=x.numpy(), x_mask=x_mask.numpy(), g=g.numpy())
|
113 |
+
logw = torch.from_numpy(logw[0])
|
114 |
+
|
115 |
+
w = torch.exp(logw) * x_mask * length_scale
|
116 |
+
w_ceil = torch.ceil(w)
|
117 |
+
return list(w_ceil.squeeze())
|
118 |
+
|
119 |
+
def infer_with_duration(self, x, x_lengths, w_ceil, sid=None, noise_scale=1, length_scale=1, noise_scale_w=1., max_len=None,
|
120 |
+
emotion_embedding=None):
|
121 |
+
from ONNXVITS_utils import runonnx
|
122 |
+
|
123 |
+
#x, m_p, logs_p, x_mask = self.enc_p(x, x_lengths)
|
124 |
+
x, m_p, logs_p, x_mask = runonnx("ONNX_net/enc_p.onnx", x=x.numpy(), x_lengths=x_lengths.numpy())
|
125 |
+
x = torch.from_numpy(x)
|
126 |
+
m_p = torch.from_numpy(m_p)
|
127 |
+
logs_p = torch.from_numpy(logs_p)
|
128 |
+
x_mask = torch.from_numpy(x_mask)
|
129 |
+
|
130 |
+
if self.n_speakers > 0:
|
131 |
+
g = self.emb_g(sid).unsqueeze(-1) # [b, h, 1]
|
132 |
+
else:
|
133 |
+
g = None
|
134 |
+
assert len(w_ceil) == x.shape[2]
|
135 |
+
w_ceil = torch.FloatTensor(w_ceil).reshape(1, 1, -1)
|
136 |
+
y_lengths = torch.clamp_min(torch.sum(w_ceil, [1, 2]), 1).long()
|
137 |
+
y_mask = torch.unsqueeze(commons.sequence_mask(y_lengths, None), 1).to(x_mask.dtype)
|
138 |
+
attn_mask = torch.unsqueeze(x_mask, 2) * torch.unsqueeze(y_mask, -1)
|
139 |
+
attn = commons.generate_path(w_ceil, attn_mask)
|
140 |
+
|
141 |
+
m_p = torch.matmul(attn.squeeze(1), m_p.transpose(1, 2)).transpose(1, 2) # [b, t', t], [b, t, d] -> [b, d, t']
|
142 |
+
logs_p = torch.matmul(attn.squeeze(1), logs_p.transpose(1, 2)).transpose(1, 2) # [b, t', t], [b, t, d] -> [b, d, t']
|
143 |
+
|
144 |
+
z_p = m_p + torch.randn_like(m_p) * torch.exp(logs_p) * noise_scale
|
145 |
+
|
146 |
+
#z = self.flow(z_p, y_mask, g=g, reverse=True)
|
147 |
+
z = runonnx("ONNX_net/flow.onnx", z_p=z_p.numpy(), y_mask=y_mask.numpy(), g=g.numpy())
|
148 |
+
z = torch.from_numpy(z[0])
|
149 |
+
|
150 |
+
#o = self.dec((z * y_mask)[:,:,:max_len], g=g)
|
151 |
+
o = runonnx("ONNX_net/dec.onnx", z_in=(z * y_mask)[:,:,:max_len].numpy(), g=g.numpy())
|
152 |
+
o = torch.from_numpy(o[0])
|
153 |
+
|
154 |
+
return o, attn, y_mask, (z, z_p, m_p, logs_p)
|