| งาน | สมุดบันทึก |
|---|---|
| Whisper_vits_japanese (ชุดข้อมูล Ella ในตัว) |
โครงการนี้ใช้โครงการ Whisper ของ Google เป็นตัวประมวลผลข้อมูล โดยการแก้ไข transcribe.py ของโครงการ Whisper จะสร้างไฟล์ SRT ที่เกี่ยวข้องสำหรับเสียง (PR ที่ถูกลบใช้ที่นี่และไม่พบ PR อีกต่อไปดังนั้นจึงไม่สามารถอ้างอิงถึงผู้เขียนต้นฉบับ) ในเวลาเดียวกันขีด จำกัด ของเสียงกระซิบสามารถอ่านไฟล์เสียงเพียงไม่กี่ไฟล์เท่านั้นที่ผ่อนคลายไปจนถึงจุดที่สามารถสำรวจไฟล์เสียงทั้งหมดในโฟลเดอร์ Whisper สามารถส่งออก SRT เพื่อให้อินพุตของเสียงยาวเป็นไปได้และผู้ใช้ไม่จำเป็นต้องตัดเสียงเป็นชิ้น ๆ อีกต่อไปหรือแม้กระทั่งการแปลข้อความของเสียงยาว เราพึ่งพาเสียงกระซิบโดยตรงสำหรับการจดจำคำพูดและการเตรียมข้อมูลหั่นเป็นเสียงสั้น ๆ โดยอัตโนมัติสร้างไฟล์การถอดเสียงโดยอัตโนมัติจากนั้นส่งไปยังกระบวนการฝึกอบรม VITS เมื่อพิจารณาว่าเสียงแห้งในระยะยาวนั้นง่ายกว่าที่จะได้รับ VITS VITS อุปสรรคในการเข้าจะลดลงอย่างมากอีกครั้ง
กระบวนการประมวลผลมีดังนี้: ไฟล์ SRT ที่ได้รับการยอมรับโดย Whisper จะถูกประมวลผลโดย auto.py กระบวนการประมวลผลหมายถึง Tobiasrordorf/SRT-to-CSV-และ-Audio-split: แยกไฟล์เสียงยาวตามคำบรรยาย -info ในไฟล์ SRT (บันทึกการถอดเสียงใน CSV) (github.com) ไฟล์เสียงจะถูกแปลงเป็นครั้งแรกเป็น 22050Hz และ 16 บิตจากนั้นการประทับเวลาของไฟล์ SRT ที่มีชื่อเดียวกันและการถอดเสียงการรู้จำเสียงจะถูกแปลงเป็นไฟล์ CSV ไฟล์ CSV มีเวลาเริ่มต้นและเวลาสิ้นสุดของแต่ละเซ็กเมนต์ของเสียงรวมถึงเส้นทางการถอดเสียงและไฟล์เสียงที่สอดคล้องกัน จากนั้นแพ็คเกจ Audiosegment จะใช้เพื่อแยกเสียงยาวตามเวลาเริ่มต้นและเวลาสิ้นสุดและไฟล์เสียงที่มีคำต่อท้ายถูกสร้างขึ้นตามลำดับของชิ้นเช่น A_0.WAV และ A_1.WAV ฯลฯ เสียงที่หั่นบาง ๆ จะถูกเก็บไว้ในโฟลเดอร์ SLICE_AUDIO การไหลของข้อมูลที่ตามมาสามารถเชื่อมต่อโดยตรงกับส่วน VITS
Vits Cleaner และ Symbol ที่ฉันใช้ตอนนี้คือ cjangcjengh/vits: VITS การใช้งานของญี่ปุ่นจีนเกาหลีและภาษาสันสกฤต (github.com) เป็นรุ่นแรกของยุคสร้างพระเจ้า ตอนนี้คลังสินค้าของเขาได้ปรับปรุงทำความสะอาดและสัญลักษณ์มากขึ้น แต่ฉันเป็นคนที่คิดถึงมากและฉันพลาดเวลาที่ทุกคนมาถึงตอนแรกดังนั้นฉันยังคงใช้เวอร์ชันดั้งเดิม VITS มีการประมวลผลล่วงหน้าสองครั้งหลักหนึ่งคือการจัดแนวแบบ monotonic และอีกอันคือ preprocess.py และจากนั้นคุณสามารถเริ่ม Train.py ฉันใส่กระบวนการทั้งหมดลงใน Whisper-Vits-Japanese.ipynb และฉันแค่ต้องคลิกพวกเขาทีละขั้นตอนเพื่อเรียกใช้ สิ่งเดียวที่ต้องการให้ผู้ใช้เปลี่ยนคือการแทนที่เส้นทางซิปเสียงของฉันด้วยซิปเสียงของคุณเองและส่วนที่เหลือของชิ้นส่วนไม่จำเป็นต้องแก้ไข ในที่สุดฉันยังเพิ่มคำแนะนำเพื่อบันทึกโมเดลและไฟล์ประมวลผลไปยังดิสก์เครือข่ายและเพื่อกู้คืนจุดตรวจล่าสุดล่าสุดจากดิสก์เครือข่ายในระหว่างการฝึกอบรมครั้งต่อไป
เพียงแค่ตั้งชื่อรูปแบบไฟล์เสียง speakerId_xxxx.wav และอัปโหลดไปยังโฟลเดอร์เสียง จากนั้นทำตามขั้นตอนทั่วไปเพื่อเรียกใช้ เมื่อการประมวลผลเสียงดำเนินการให้เรียกใช้ไฟล์ auto_ms.py และไฟล์ txt จะถูกสร้างขึ้นโดยอัตโนมัติด้วยเส้นทางรูปแบบ | SpeakerId | text
หมายเหตุ: หากคุณใช้ auto_ms.py เพื่อสร้าง txt คุณต้องแก้ไขเป็นรหัสในขั้นตอนการจัดตำแหน่งและการแปลงข้อความ: (เพราะ text_index ไม่ใช่ 1 แต่ 2 เมื่อฝึกอบรมหลายคน)
python preprocess.py --text_index 2 --text_cleaners japanese_cleaners --filelists /content/whisper-vits-japanese/filelists/train_filelist.txt /content/whisper-vits-japanese/filelists/val_filelist.txt
python train_ms.py -c configs/ms.json -m ms
hps = utils.get_hparams_from_file("./configs/ms.json")
net_g = SynthesizerTrn(
len(symbols),
hps.data.filter_length // 2 + 1,
hps.train.segment_size // hps.data.hop_length,
n_speakers=hps.data.n_speakers,
**hps.model).cuda()
_ = net_g.eval()
_ = utils.load_checkpoint("/root/autodl-tmp/logs/ms/G_29000.pth", net_g, None)
stn_tst = get_text("ごめんね優衣", hps)
with torch.no_grad():
x_tst = stn_tst.cuda().unsqueeze(0)
x_tst_lengths = torch.LongTensor([stn_tst.size(0)]).cuda()
sid = torch.LongTensor([11]).cuda() //11指speakerId为11,如果有12个n_speaker,编号就从0-11
audio = net_g.infer(x_tst, x_tst_lengths, sid=sid, noise_scale=.667, noise_scale_w=0.8, length_scale=1)[0][0,0].data.cpu().float().numpy()
ipd.display(ipd.Audio(audio, rate=hps.data.sampling_rate, normalize=False))