TTS相關

文章目錄

  • VALL-E-X
    • 簡介
    • code
  • vist
    • 論文
    • 解讀
    • 代碼解讀
    • 模塊
    • loss
    • 代碼
  • valle
  • 名詞解釋

VALL-E-X

簡介

微軟VALL-E-X:夸克在用
可以預訓練模型
端到端

code

code:https://github.com/Plachtaa/VALL-E-X/tree/master
報錯1:

File "/mnt/TTS/VALL-E-X/test.py", line 6, in <module>preload_models()File "/mnt/TTS/VALL-E-X/utils/generation.py", line 89, in preload_modelsvocos = Vocos.from_pretrained('charactr/vocos-encodec-24khz').to(device)File "/mnt/envs/tts_env/lib/python3.10/site-packages/vocos/pretrained.py", line 67, in from_pretrainedconfig_path = hf_hub_download(repo_id=repo_id, filename="config.yaml", revision=revision)File "/mnt/envs/tts_env/lib/python3.10/site-packages/huggingface_hub/utils/_validators.py", line 118, in _inner_fn

報錯原因:沒有網,無法load遠程資料。需要手動下載,放在指定的位置。
下載鏈接:https://huggingface.co/charactr/vocos-encodec-24khz 頁面files and versions
下載的文件:config.yaml / pytorch_model.bin
linux系統放在:ls models–charactr–vocos-encodec-24khz/
注釋掉下載的代碼:/mnt/envs/tts_env/lib/python3.10/site-packages/vocos/pretrained.py

# config_path = hf_hub_download(repo_id=repo_id, filename="config.yaml", revision=revision)
# model_path = hf_hub_download(repo_id=repo_id, filename="pytorch_model.bin", revision=revision)
config_path = '/root/.cache/huggingface/hub/models--charactr--vocos-encodec-24khz/config.yaml'
model_path = '/root/.cache/huggingface/hub/models--charactr--vocos-encodec-24khz/pytorch_model.bin'

參考解決方案:https://github.com/Plachtaa/VALL-E-X/issues/89

vist

論文

Conditional Variational Autoencoder with Adversarial Learning for End-to-End Text-to-Speech

解讀

代碼解讀

模型結構:gan+flow+vae模型
大框架是vae,訓練時用gan,建模的時候用到了flow。

后驗分布就是高斯分布;先驗分布是高斯分布*flow

模塊

Text Encoder:先驗的文本的編碼器模塊,將獨立的字表征成上下文相關的特征,得到一個以文字和說話者為條件的先驗的分布:text->phonemet->先驗分布。
Linear Spectorgram:輸入wav,無參數訓練的一種傅立葉變換,得到頻譜。
posterior encoder:輸入頻譜,經過編碼,得到后驗分布。

loss

1、重構loss,輸入的wav的梅爾頻譜和生成的wav的梅爾頻譜計算loss。
2、KL loss:text的先驗分布和audio的后驗分布要對齊。audio的后驗分布是頻譜的長度,text的先驗分布顯然比audio的后驗要短,需要將先驗擴充一下。
怎么對齊:通過動態規劃的方式,找到每個因素持續的時長。先驗分布根據時長進行擴展,和后驗就在同一個維度了。
3、時長預測器:是一個flow模型,為什么需要時長預測器?infer的時候沒有頻譜可以來對齊text,需要預測。預測每個因素時長的分布,而不是預測因素時長的期望。有一個kl loss。
4、 gan的loss。
模型不是一個確定性的模型,即,每次預測的結果可能都不一樣。采樣的時候,是one to many的。

代碼

train.py

class TextAudioSpeakerLoader(torch.utils.data.Dataset):def _filter(self)#如果文本太短做過濾。	#dataset被調用的時候,會走getitem函數。text = self.get_text(text) #對phoneme進行離散化,將字符變成索引。
DistributedBucketSampler:#text的長度變化很大,不做桶排序的話,反向梯度的效率會很低。提升訓練效率。為什么效率不高,因為text短的話,需要pad較多的無效數據。def __init__(self, dataset, batch_size, boundaries, num_replicas=None, rank=None, shuffle=True):boundaries:#分桶的邊界。邊界是幀。num_replicas:#gpu卡數。def _create_buckets(self):返回桶,及每個桶的樣本量。indices.append(torch.randperm(len(bucket), generator=g).tolist()):shuffle
TextAudioSpeakerCollate_, ids_sorted_decreasing = torch.sort( #根據梅爾頻譜的長度進行排序torch.LongTensor([x[1].size(1) for x in batch]),dim=0, descending=True)
net_g = SynthesizerTrn( # 是生成器,從text到wavlen(symbols),hps.data.filter_length // 2 + 1,hps.train.segment_size // hps.data.hop_length,n_speakers=hps.data.n_speakers,**hps.model).cuda(rank)
net_d = MultiPeriodDiscriminator(hps.model.use_spectral_norm).cuda(rank) # 多周期的判別器
optim_g = torch.optim.AdamW( # 生成器的優化函數net_g.parameters(), hps.train.learning_rate, betas=hps.train.betas, eps=hps.train.eps)optim_d = torch.optim.AdamW(# 判別器的優化函數net_d.parameters(),hps.train.learning_rate, betas=hps.train.betas, eps=hps.train.eps)
net_g = DDP(net_g, device_ids=[rank]) # 分布式訓練
scheduler_g = torch.optim.lr_scheduler.ExponentialLR(optim_g, gamma=hps.train.lr_decay, last_epoch=epoch_str-2) # 學習率的衰減方案from torch.cuda.amp import autocast, GradScaler
scaler = GradScaler(enabled=hps.train.fp16_run) # 混合訓練 fp16進行訓練,在效率和性能上進行平衡
x, x_lengths = x.cuda(rank, non_blocking=True), x_lengths.cuda(rank, non_blocking=True) # 把數據copy到gpu上面
y_hat, l_length, attn, ids_slice, x_mask, z_mask,\(z, z_p, m_p, logs_p, m_q, logs_q) = net_g(x, x_lengths, spec, spec_lengths, speakers)
# y_hat 預估波形;l_length 預估波形的長度;并不是所有的波形都參與訓練,而是對波形進行了采樣,減少內存的消耗。ids_slice:采樣后的頻譜的id。
spec:線性普
spec_to_mel_torch()線性普轉梅爾普
mel_spectrogram_torch() 波形到梅爾普
y_mel = commons.slice_segments(mel, ids_slice, hps.train.segment_size // hps.data.hop_length) # 對梅爾普也進行采樣。
y = commons.slice_segments(y, ids_slice * hps.data.hop_length, hps.train.segment_size) # 一個梅爾普對應256個波形點y_d_hat_r, y_d_hat_g, _, _ = net_d(y, y_hat.detach()) # y_d_hat_r真實的判別器的輸出,生成的判別器判別器的輸出,判別器
with autocast(enabled=False): # 不走fp16loss_disc, losses_disc_r, losses_disc_g = discriminator_loss(y_d_hat_r, y_d_hat_g)loss_disc_all = loss_disc
optim_d.zero_grad()  #判別器梯度置0

model.py

self.dec = Generator(inter_channels, resblock, resblock_kernel_sizes, resblock_dilation_sizes, upsample_rates, upsample_initial_channel, upsample_kernel_sizes, gin_channels=gin_channels) # 波形生成器self.enc_q = PosteriorEncoder(spec_channels, inter_channels, hidden_channels, 5, 1, 16, gin_channels=gin_channels) # 后驗編碼器
PosteriorEncoder:def forward(self, x, x_lengths, g=None):#g是一個條件,以說話人為條件x_mask = torch.unsqueeze(commons.sequence_mask(x_lengths, x.size(2)), 1).to(x.dtype)x = self.pre(x) * x_maskx = self.enc(x, x_mask, g=g)stats = self.proj(x) * x_maskm, logs = torch.split(stats, self.out_channels, dim=1) # m分布的方差 # logs分布的標準差取logz = (m + torch.randn_like(m) * torch.exp(logs)) * x_mask return z, m, logs, x_maskself.flow = ResidualCouplingBlock(inter_channels, hidden_channels, 5, 1, 4, gin_channels=gin_channels)# 提高先驗分布的表達能力的,加flow效果會更好,是先驗的flowif use_sdp: #隨機時長預測器,(說話的韻律節奏)self.dp = StochasticDurationPredictor(hidden_channels, 192, 3, 0.5, 4, gin_channels=gin_channels)x, m_p, logs_p, x_mask = self.enc_p(x, x_lengths) # x 文本的encode,m_p分布的方差,logs_p分布的標準差,是fseitaz分布的u sigma
z_p = self.flow(z, y_mask, g=g) # 后驗經常一個逆flow;或者先驗經過一個flow# 動態規劃 單調對齊搜索
with torch.no_grad():# negative cross-entropys_p_sq_r = torch.exp(-2 * logs_p) # [b, d, t]neg_cent1 = torch.sum(-0.5 * math.log(2 * math.pi) - logs_p, [1], keepdim=True) # [b, 1, t_s]neg_cent2 = torch.matmul(-0.5 * (z_p ** 2).transpose(1, 2), s_p_sq_r) # [b, t_t, d] x [b, d, t_s] = [b, t_t, t_s]neg_cent3 = torch.matmul(z_p.transpose(1, 2), (m_p * s_p_sq_r)) # [b, t_t, d] x [b, d, t_s] = [b, t_t, t_s]neg_cent4 = torch.sum(-0.5 * (m_p ** 2) * s_p_sq_r, [1], keepdim=True) # [b, 1, t_s]neg_cent = neg_cent1 + neg_cent2 + neg_cent3 + neg_cent4l_length = l_length / torch.sum(x_mask) # l_length是似然attn_mask = torch.unsqueeze(x_mask, 2) * torch.unsqueeze(y_mask, -1)attn = monotonic_align.maximum_path(neg_cent, attn_mask.squeeze(1)).unsqueeze(1).detach() # attn是01矩陣,因為是硬對齊,attn shape[b,1,T_s,T_t] 文本長度,頻譜長度
w = attn.sum(2) #w的shape [b, 1,T_t] 每個文本有多少幀 T_t是文字
# 對齊之前 m_p 的shape [b,feat_dim,T_t] 
# 對齊之前 logs_p 的shape [b,feat_dim,T_t] 
m_p = torch.matmul(attn.squeeze(1), m_p.transpose(1, 2)).transpose(1, 2)# expand prior
# 對齊后擴展后 m_p 的shape [b,feat_dim,T_s] 
# 對齊后擴展后 logs_p 的shape [b,feat_dim,T_s] z_slice, ids_slice = commons.rand_slice_segments(z, y_lengths, self.segment_size) # 為了減少內存,進入解碼器之前,需要進行采樣,segment_size決定了采樣的頻率;一個幀頻譜對應256個波形點
o = self.dec(z_slice, g=g) # 反卷積和參差網絡,一個幀頻譜對應256個波形點,如果想從頻譜產出波形,需要上采樣256,需要4個上采樣 8 8 2 2if use_sdp: # 隨機時長預測器self.dp = StochasticDurationPredictor(hidden_channels, 192, 3, 0.5, 4, gin_channels=gin_channels)else:self.dp = DurationPredictor(hidden_channels, 256, 3, 0.5, gin_channels=gin_channels)# x輸入 經過神經網絡或者transfrom 和 w計算f1 lossclass StochasticDurationPredictor(nn.Module): # 隨機 事表現力更強,預測每個因素餓時長分布,從分布中采樣就是隨機 通過重參數化 基于flow來設計的。

valle

名詞解釋

VITS: VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)是一種結合變分推理(variational inference)、標準化流(normalizing flows)和對抗訓練的高表現力語音合成模型
b站 bert+vits2:
https://www.bilibili.com/video/BV1oC4y1D7VX/?spm_id_from=333.337.search-card.all.click
Zero-Shot Learning簡稱ZSL
TTS:Text-to-Speech
飛槳 PaddlePaddle:百度旗下產品

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/14291.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/14291.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/14291.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RabbitMQ有哪些優缺點

一&#xff0c;RabbitMQ有哪些優勢 RabbitMQ 作為一款流行的消息隊列服務&#xff0c;具有許多優勢&#xff0c;這些優勢使得它在各種應用場景中都能發揮出色的作用。以下是 RabbitMQ 的一些主要優勢&#xff1a; 高可靠性&#xff1a; RabbitMQ 使用持久化功能&#xff0c;無…

路由導航守衛-全局前置守衛

路由導航守衛中的全局前置守衛&#xff08;Global Before Guards&#xff09;是Vue Router中的一個重要概念。當路由即將改變&#xff08;導航觸發&#xff09;時&#xff0c;這些守衛會按照創建順序調用。它們允許你在路由跳轉之前執行一些操作或判斷&#xff0c;例如檢查用戶…

epoch的數據不能隨便截取,不是特征,要根據時間!!!

長個記性&#xff0c;這半個多月像個笑話&#xff0c;哈哈哈哈

pip如何快速install packet

1、在后面加-i https://mirrors.aliyun.com//pypi//simple或https://pypi.tuna.tsinghua.edu.cn/simple pip install numpy -i https://mirrors.aliyun.com//pypi//simplepip install numpy1.21.0 -i https://pypi.tuna.tsinghua.edu.cn/simple2、需要注意的是&#xff0c;如果…

IDEA指南

IDEA簡介 截止到2021.08.31&#xff0c;是全世界最流行的Java集成開發環境 tips 快捷鍵 ctrl alt v&#xff1a;快速生成方法返回值接收代碼/** enter&#xff1a;生成javaDoc注釋 IDEA常見error Error: java: System Java Compiler was not found in classpath Proj…

【Python設計模式04】策略模式

策略模式&#xff08;Strategy Pattern&#xff09;是一種行為型設計模式&#xff0c;它定義了一系列算法&#xff0c;并將每個算法封裝起來&#xff0c;使它們可以互相替換。策略模式讓算法的變化不會影響使用算法的客戶端&#xff0c;使得算法可以獨立于客戶端的變化而變化。…

Langchain:數據連接封裝、緩存封裝和LCEL學習和探索

&#x1f335; 目錄 &#x1f335; &#x1f60b; 數據連接封裝 &#x1f354; 文檔加載器&#xff1a;Document Loaders 文檔處理器&#xff1a;TextSplitter 向量數據庫與向量檢索 總結 &#x1f349; 緩存封裝&#xff1a;Memory &#x1f3d6;? 對話上下文&#xf…

上位機圖像處理和嵌入式模塊部署(mcu之芯片選擇)

【 聲明&#xff1a;版權所有&#xff0c;歡迎轉載&#xff0c;請勿用于商業用途。 聯系信箱&#xff1a;feixiaoxing 163.com】 目前市面上的mcu很多&#xff0c;有國產的&#xff0c;有進口的&#xff0c;總之種類很多。以stm32為例&#xff0c;這里面又包括了stm32f1、stm32…

Flutter 中的 LicensePage 小部件:全面指南

Flutter 中的 LicensePage 小部件&#xff1a;全面指南 在軟件開發中&#xff0c;遵守開源許可證的要求是至關重要的。Flutter 提供了一個內置的 LicensePage 小部件&#xff0c;它用于展示應用中使用的所有開源庫的許可證信息。本文將為您提供一個全面的指南&#xff0c;幫助…

git commit 規范

在提交代碼時標識本次提交的屬性 feat: 新功能&#xff08;feature&#xff09; fix: 修補bug docs: 文檔&#xff08;documentation&#xff09; style: 格式&#xff08;不影響代碼運行的變動&#xff09; refactor: 重構&#xff08;即不是新增功能&#xff0c;也不是修改b…

熱愛無解 少年萬丈光芒!首席藝人【彭禹錦】登陸第八季完美童模全球賽

2024年7月&#xff0c;一檔由IPA模特委員會創辦于2017年的王牌少兒模特大賽即將拉開全球總決賽的帷幕!作為家喻戶曉的國民賽事——完美童模曾6季榮獲CCTV央視新聞報道&#xff0c;以創意引領、美學引領、和兼具文化底蘊的賽事特色&#xff0c;收獲了全球百萬親子家庭的喜愛。20…

深度學習之基于Pytorch+Flask Web框架預測手寫數字

歡迎大家點贊、收藏、關注、評論啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代碼。 文章目錄 一項目簡介 二、功能三、系統四. 總結 一項目簡介 一、項目背景與意義 隨著人工智能和深度學習的快速發展&#xff0c;手寫數字識別已成為一個重要的應用領域。該項目…

Python 實現批量文件重命名工具

在現代軟件開發中&#xff0c;圖形用戶界面 (GUI) 工具的創建是一個常見需求。對于那些需要頻繁處理文件的任務&#xff0c;擁有一個簡便的 GUI 工具尤為重要。在這篇博客中&#xff0c;我們將介紹如何使用 wxPython 創建一個簡單的批量文件重命名工具。該工具可以選擇一個文件…

判斷子序列二刷

文章目錄 1、描述2、思路3、notes4、復雜度 1、描述 給定字符串 s 和 t &#xff0c;判斷 s 是否為 t 的子序列。 你可以認為 s 和 t 中僅包含英文小寫字母。字符串 t 可能會很長&#xff08;長度 ~ 500,000&#xff09;&#xff0c;而 s 是個短字符串&#xff08;長度 <1…

Web開發——HTMLCSS

1、概述 Web開發分前端開發和后端開發&#xff0c;前端開發負責展示數據&#xff0c;后端開發負責處理數據。 HTML&CSS是瀏覽器數據展示相關的內容。 1&#xff09;網頁的組成部分 文字、圖片、音頻、視頻、超鏈接、表格等等 2&#xff09;網頁背后的本質 程序員寫的前端…

重大活動網絡安全保障建設及運營指南

在當今高度數字化的社會中&#xff0c;各類重大活動如會議、展覽、賽事及慶典等正面臨著日益復雜和嚴峻的網絡安全威脅。這些威脅不限于網絡入侵或數據泄露&#xff0c;更涉及到對基礎設施、關鍵信息系統和公眾輿論的復雜攻擊&#xff0c;需要國際社會的密切合作和長期關注。因…

一張圖看懂大模型性價比:能力、價格、并發量全面PK

最近&#xff0c;國內云廠商的大模型掀起一場降價風暴。火山引擎、阿里云、百度云等紛紛宣布降價&#xff0c;部分模型價格降幅據稱高達99%&#xff0c;甚至還有些模型直接免費。 五花八門的降價話術&#xff0c;一眼望去遍地黃金。但事實真的如此嗎&#xff1f;今天我們就撥開…

統計信號處理基礎 習題解答10-2

題目 兩個隨機變量x和y&#xff0c;如果聯合PDF分解為&#xff1a; 那么稱他們為條件獨立的。在上式中z是條件隨機變量。 我們觀察 其中, , 是相互獨立的。證明和是條件獨立的。給出條件變量是A。和是無條件獨立么&#xff1f;也就是 成立么&#xff1f;為了回答這個問題&…

如何使用jmap工具生成堆內存快照

1、確保已安裝JDK&#xff1a; 首先&#xff0c;確保你的系統上安裝了Java Development Kit (JDK)。 2、找到Java進程的PID&#xff1a; 你需要知道你想要生成堆內存快照的Java進程的進程ID&#xff08;PID&#xff09;。你可以使用命令行工具如ps&#xff08;在Unix/Linux系…

Redis Cluster 集群搭建

1. 安裝 Redis sudo apt-get update sudo apt-get install redis-server2. 創建配置文件 為每個 Redis 實例創建獨立的配置文件和數據目錄&#xff1a; mkdir -p /usr/local/redis-cluster/{7000,7001,7002,7003,7004,7005}3. 配置文件內容 每個 Redis 實例的配置文件內容如…