„Sztuczna Inteligencja” w klonowaniu ludzkiego głosu i kreacji wirtualnych gwiazd muzycznych
Tworzenie grafiki, tekstów, kodu programistycznego i materiałów wideo – w tych aspektach przedstawiałem już tzw. „sztuczną inteligencję”. Dlaczego więc tym razem nie skupić się na dźwięku? Dźwięku, który nas otacza każdego dnia, w postaci ludzkiej mowy oraz muzyki.
W tym artykule postaram się przedstawić kilka prostych oraz praktycznych zastosowań uczenia maszynowego, w procesie klonowania ludzkiej mowy (celem późniejszego przekształcenia tekstu na dźwięk) oraz tworzenia bardzo popularnych wirtualnych gwiazd muzycznych.
Pamiętać jednak trzeba, że o ile z wykorzystaniem naszego głosu nie ma problemów, o tyle wykorzystywanie głosu innych osób bez ich zgody, to już sprawa bardziej skomplikowana prawnie.
Real-Time-Voice-Cloning – proste klonowanie głosu w czasie rzeczywistym
Real-Time-Voice-Cloning to projekt, który Corentin Jemine stworzył w ramach swojej pracy magisterskiej. Dzięki niemu w prosty sposób, przy pomocy bardzo krótkich próbek głosowych, w czasie rzeczywistym będziemy mogli zmienić tekst w ludzką mowę, imitującą głos materiału źródłowego. Jest to zestaw narzędzi służących do klonowania głosu z wykorzystaniem minimum 5 sekund dźwięku dawcy oraz późniejszej syntezy mowy z na podstawie pobranego głosu. Wykorzystując framework SV2TTS działający w 3 etapach, program najpierw tworzy cyfrową reprezentację dostarczonego głosu (przy pomocy pliku lub nagrania na żywo), a następnie w 2 i 3 etapie reprezentacja ta wykorzystywana jest do wygenerowania mowy z dowolnego wpisanego tekstu. Domyślnie program pracuje wyłącznie na modelu w języku angielskim.
Niestety jak każdy skrypt wykorzystujący tzw. „AI”, tak i ten ma problem z artefaktami i mechanicznym pogłosem. Problem ten niestety dotyczy wszystkich popularnych programów, nawet bazujących na bardzo dużych, wytrenowanych wcześniej modelach.
Projekt dostępny jest pod adresem: https://github.com/CorentinJ/Real-Time-Voice-Cloning.
Instalacja programu:
By zainstalować oprogramowanie, należy wykonać poniższe kroki:
- Pobierz oraz rozpakuj w dowolnym miejscu Real-Time-Voice-Cloning. Program do pobrania dostępny jest pod adresem: https://github.com/CorentinJ/Real-Time-Voice-Cloning. Aby go ściągnąć, wybierz opcję „Code”, a następnie „Download ZIP”.
- Pobierz i zainstaluj aktualną wersję Anaconda. Plik instalacyjny dostępny jest pod adresem: https://www.anaconda.com.
- Uruchom linię komend „Anaconda Prompt” (plik po instalacji wyszukasz np. w menu start).
- Przy pomocy Anaconda twirzymy nowe środowisko Python, w którym będziemy pracować, o dowolnej nazwie (u mnie będzie to „voice-cloning”). Zalecane wersje środowiska Python to minimum 3.7. W moim przypadku będzie to wersja 3.9. By tego dokonać, w „Anaconda Prompt” wpisz poniższą komendę i potwierdź ją enterem:
conda create --name voice-cloning python=3.9
W pewnym momencie Anaconda zapyta, czy na pewno chcemy procedować to działanie dalej, zatwierdzamy wpisując „y” oraz ponownie klikamy enter.
- Po stworzeniu nowego środowiska musimy je aktywować. W tym celu używamy komendy:
conda activate voice-cloning
- Gdy już aktywowaliśmy środowisko, czas zainstalować w nim wszystkie potrzebne nam komponenty. Zaczynamy od platformy ffmpeg. W linii komend Anaconda wpisz poniższy kod i poczekaj, aż zakończy się instalacja:
conda install -c conda-forge ffmpeg
Jeżeli nie działa, aktualną komendę instalacyjną znajdziemy pod adresem: https://anaconda.org/conda-forge/ffmpeg.
- Kolejną biblioteką, którą będziemy musieli zainstalować, będzie PyTorch. W tym celu korzystamy z poniższej komendy:
conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cpuonly -c pytorch
Kiedy Anaconda zapyta, czy na pewno chcemy procedować to działanie dalej, wpisujemy „y” oraz ponownie potwierdzamy enterem.
- Czas przejść do Real-Time-Voice-Cloning. W tym celu przejdź w konsoli na adres, w którym rozpakowany został program. Możesz to zrobić podobnie, jak w przypadku windowsowego CMD, czyli przy pomocy polecenia „cd..” – przechodząc na początek obecnie zajmowanej ścieżki, a następnie „cd
„.
W moim przypadku program znajduje się na pulpicie, w katalogu Real-Time-Voice-Cloning, dlatego przejdę tam następującą komendą:cd C:Users<User>DesktopReal-Time-Voice-Cloning
- Będąc w folderze programu, możemy zainstalować wszystkie wymagane moduły wskazane przez autora aplikacji. W linii komend wpisujemy:
pip install -r requirements.txt
- W trakcie instalacji wymaganych pakietów najprawdopodobniej otrzymamy informację o braku zainstalowanego Microsoft Visual C++ 14.0 (jeżeli oczywiście go nie posiadamy). Musimy więc go zainstalować. Bezpośredni instalator znajduje się pod adresem: https://aka.ms/vs/16/release/vs_buildtools.exe. Jeżeli link przestanie być aktywny, więcej informacji znajdziemy pod poniższym adresem: https://visualstudio.microsoft.com/visual-cpp-build-tools/. Po pobraniu pliku instalacyjnego, uruchamiamy go, następnie otwieramy zakładkę „individual components” i wyszukujemy wersję SDK odpowiadającą naszej wersji systemu Windows (w wyszukiwarce wpisz wersję systemu i zaznaczając odpowiednią wersję SDK). W przypadku Windows 11 będzie to „Windows 11 SDK (10.0.22000.0”, natomiast dla Windows 10 możemy skorzystać z „Windows 10 SDK (10.0.20348.0)”.
- Czas na pierwsze uruchomienie dema w postaci interfejsu opartego o linię komend. Przed jego uruchomieniem skrypt powinien automatycznie zainstalować wszystkie wymagane moduły i modele. W linii komend Anaconda (będąc w aktywowanym naszym środowisku) wpisujemy oraz czekamy aż skończy swoją pracę:
python demo_cli.py
- Niestety nie wszystkie moduły zinstalują się automatycznie, prawdopodobnie w trakcie Anaconda poinformuje nas, iż nie posiadamy modułów librosa, unidecode, inflect, webrtcvad-wheels lub tqdm. By je zainstalować, w linii komend pojedynczo wpisujemy kolejne z poniższych poleceń:
conda install -c conda-forge librosa
pip install unidecode
pip install inflect
pip install webrtcvad-wheels
pip install tqdmDodatkowo z różnych przyczyn podczas instalacji może nie pobrać się automatycznie największy model, czyli synthesizer.pt. W takim wypadku możemy pobrać go bezpośrednio z repozytorium: https://github.com/CorentinJ/Real-Time-Voice-Cloning/wiki/Pretrained-models, a następnie rozpakować do folderu [saved_models -> default], w folderze z aplikacją.
- Kiedy posiadamy już wszystkie moduły, ponownie wpisujemy polecenie „python demo_cli.py”, by uruchomić skrypt. Jeżeli okaże się, iż brakuje jeszcze jakiegoś modułu, po prostu jak wyżej, używamy komendy „pip install <nazwa_modułu>”, gdzie <nazwa_modułu> to nazwa brakującego modułu oraz powtarzamy polecenie „python demo_cli.py” aż do momentu, gdy wszystkie moduły będą zainstalowane i zobaczymy napis „enter an audio filepath of a voice to be cloned (mp3, wav, m4a, flac, …)”. Gdy mamy taki widok, możemy zamknąć wszystkie okna oraz przejść do następnego kroku.
- Czas na pobranie przykładowych zbiorów danych (Datasets) i uruchomienie interfejsu graficznego. Przykładowe pliki Datasets ściągnąć możemy z adresu: https://www.openslr.org/resources/12/train-clean-100.tar.gz, a następnie rozpakowujemy je w folderze programu.
- Teraz pierwsze uruchomienie interfejsu graficznego. Ponownie uruchamiamy „Anaconda Prompt”, aktywujemy nasze środowisko komendą „conda activate voice-cloning” i jak wcześniej przechodzimy do katalogu programu (komenda „cd <ścieżka_programu>”). Gdy jesteśmy już w odpowiednim środowisku i folderze, uruchamiamy polecenie:
python demo_toolbox.py
Podobnie jak poprzednio, przy pierwszym uruchomieniu skrypt powinien zainstalować wszystkie wymagane moduły.
- Jeżeli jednak nie wszystkie zostaną zainstalowane – prawdopodobnie zapyta o moduły sounddevice, umap, pyQt5 – po prostu je instalujemy, kolejno wprowadzając poniższe polecenia:
pip install sounddevice
pip install umap
pip install pyQt5 - Po zainstalowaniu wszystkich modułów, ponownie wpisujemy komendę „python demo_toolbox.py”. Jeżeli jeszcze jakiegoś modułu by brakowało, jak wyżej używamy odpowiedniej komendy „pip install <nazwa_modułu>” oraz powtarzamy „python demo_toolbox.py”, aż do skutku, gdy pojawi się graficzne okno programu. Gdy to nastąpi, możemy już z niego korzystać.
Generowanie mowy z tekstu na podstawie pojedynczego pliku:
Generowanie mowy z pojedynczego pliku źródłowego, to najprostsza czynność do wykonania w programie. Wykonując następujące kroki z pozycji Anaconde musimy uruchomić program, a następnie wskazać plik źródłowy, podać treść wypowiedzi oraz włączyć proces syntezy:
- Uruchom linię komend „Anaconda Prompt”.
- Aktywuj wcześniej stworzone (u mnie będzie to voice-cloning):
conda activate voice-cloning
- W linii komend Anaconda przejdź do ścieżki programu (u mnie znajduje się on na pulpicie):
cd C:Users<User>DesktopReal-Time-Voice-Cloning
- Uruchom interfejs graficzny programu:
python demo_toolbox.py
- W oknie programu wybierz przycisk „Browse”, następnie wskaż ścieżkę do pliku *.mp3, *.wav, *.flac lub *.m4a, z którego ma zostać pobrany wzorzec głosu (minimum 5 sekund nagrania).
- Dla pewności kliknij „Play”, by sprawdzić, czy właściwy wzorzec został pobrany.
- W polu tekstowym po angielsku wpisz wypowiedź, która ma zostać przetworzona na dźwięk.
- Kliknij przycisk „Synthesize and vocode” i poczekaj, aż program skończy syntezę. Kiedy proces zostanie zakończony, program odtworzy finalny dźwięk. Jeżeli będziemy chcieli ponownie go odsłuchać, możemy użyć opcji „Replay”, natomiast gdy zechcemy go pobrać, po prostu wybieramy „Export”. Generowane tak pliki nie zawsze są najlepszej jakości, dlatego warto powtórzyć syntezę kilka razy, aż otrzymamy satysfakcjonujący nas efekt.
Generowanie mowy z tekstu na podstawie Datasets:
Generowanie z wykorzystaniem Datasets jest bardzo podobne do generowania bez, jedyna różnica jest taka, że przy uruchamianiu programu musimy wskazać ścieżkę, gdzie znajduje się nasz katalog Datasets (w naszym przypadku jest to folder programu).
- Uruchom linię komend „Anaconda Prompt”.
- Aktywuj wcześniej stworzone (u mnie będzie to voice-cloning):
conda activate voice-cloning
- W linii komend Anaconda przejdź do ścieżki programu (u mnie znajduje się on na pulpicie):
cd C:Users<User>DesktopReal-Time-Voice-Cloning
- Uruchom interfejs graficzny programu ze wskazaniem ścieżki do katalogu Datasets (u mnie znajduje się on w folderze programu):
python demo_toolbox.py -d C:Users<User>DesktopReal-Time-Voice-Cloning
- W oknie programu, z listy wybierz interesujący Cię „Dataset”, następnie mówcę („Speaker”) i samą wypowiedź („Utterance”), z której ma zostać pobrany wzorzec głosu, po czym kliknij „Load”.
- Dla pewności kliknij „Play”, by sprawdzić, czy właściwy wzorzec został pobrany.
- W polu tekstowym po angielsku wpisz wypowiedź, która ma zostać przetworzona na dźwięk.
- Kliknij przycisk „Synthesize and vocode” i poczekaj, aż program skończy syntezę. Kiedy proces zostanie zakończony, program odtworzy finalny dźwięk. Jeżeli będziemy chcieli ponownie go odsłuchać, możemy użyć opcji „Replay”, natomiast gdy zechcemy go pobrać, po prostu wybieramy „Export”. Generowane tak pliki nie zawsze są najlepszej jakości, dlatego warto powtórzyć syntezę kilka razy, aż otrzymamy satysfakcjonujący nas efekt.
Dodawanie nowego głosu do Datasets:
Wiemy już jak wygenerować wypowiedź, teraz czas na tworzenie nowych zestawów gotowych dźwięków źródłowych do wykorzystania w programie. Proces jest bardzo prosty.
1. Wejdź do katalogu [LivriSpeeach -> train-clean-100] w folderze z programem.
2. Utwórz folder nowego mówcy o nie istniejącym wcześniej numerze (w moim przypadku będzie to „16”).
3. W nowoutworzonym katalogu (16) stwórz podfolder o numerze „188”.
4. Do folderu [16 -> 188] wrzuć wszystkie posiadane próbki głosu danego aktora, pamiętając jednak, by ich nazwy były zgodne z szablonem: „<numer_mówcy>-188-<czyerocyfrowy_numer_wypowiedzi>.<rozszerzenie>”. Np. kolejne pliki nazywając 16-188-0001.flac, 16-188-0002.flac, 16-188-0003.flac. Pliki powinny być w formacie *.mp3, *.wav, *.flac lub *.m4a – najbardziej polecany jednak jest bezstratny format *.flac.
Poniżej wrzucam dwa przykłady głosów wygenerowanych przy pomocy tego oprogramowania na podstawie kilkusekundowych próbek:
Tacotron 2 – trzon wszystkiego
Jeżeli nie chcemy korzystać z uproszczonych narzędzi, możemy bezpośrednio odnieść się do samego modelu Tacotron 2. To aktualnie chyba najlepszy publicznie dostępny do wykorzystania skrypt na zwykłych komputerach (nie wymagający superkomputera), pozwalający na tworzenie własnych modeli głosowych oraz zamianę tekstu na mowę przypominającą ludzką. Zależnie od jakości wyszkolenia modelu, uzyskane efekty mogą być na różnym poziomie. Domyślny język już wyszkolonych modeli, to angielski, istnieje jednak możliwość wytrenowania także modelu opartego na języku polskim. Przy odpowiednio długim szkoleniu modelu od podstaw lub po prostu trenując polskimi próbkami wcześniej przetrenowany model angielski.
Niestety jak każdy skrypt wykorzystujący tzw. „AI”, tak i ten ma problem z artefaktami i mechanicznym pogłosem. Problem ten niestety dotyczy wszystkich popularnych programów, nawet bazujących na bardzo dużych, wytrenowanych wcześniej modelach.
Pliki do pobrania i szczegółową dokumentację wraz z opisem instalacji oraz użycia znajdziecie pod adresem: https://github.com/NVIDIA/DeepLearningExamples/tree/master/PyTorch/SpeechSynthesis/Tacotron2.
Jeżeli jednak nie posiadacie odpowiednio mocnej karty graficznej, skorzystać możecie również z zasobów firmy Google, korzystając z poniższego notebooka na Google Colab: https://colab.research.google.com/github/pytorch/pytorch.github.io/blob/master/assets/hub/nvidia_deeplearningexamples_tacotron2.ipynb.
By poznać jego możliwości bez konieczności trenowania własnych modeli, stworzona została strona demo projektu: https://huggingface.co/spaces/pytorch/Tacotron2.
Mekatron 2 – proste klonowanie polskich głosów w praktyce
Mekatron 2, to polska implementacja syntezatora Tacotron 2, wyposażona w już przetrenowane modele polskich głosów. Dzięki temu pozwalająca na łatwiejsze wytrenowanie modeli z wykorzystaniem języka polskiego, w porównaniu do czystego Tacotrona 2 (chyba, że i w tym przypadku również zaopatrzycie się w takie modele).
Ponieważ skrypt działa na bazie Tacotron 2, to jakość generowanych wypowiedzi jest identyczna jak w powyższym.
Wcześniej projekt był dostępny m.in. w postaci strony internetowej, pozwalającej generować wypowiedzi na podstawie już wytrenowanych przez autora głosów polskich lektorów. Zgodnie jednak z informacją umieszczoną przez samego autora na oficjalnym kanale FB, strona została zamknięta z przyczyn prawnych.
Obecnie sam skrypt oparty o Mekatron 2, dzięki użytkownikowi Vojak, dostępny jest w postaci notebooka na platformie Google Colab, gdzie z wykorzystaniem maszyn Google jesteście sami w stanie wytrenować swój głos lub skorzystać z posiadanego przez siebie modelu.
Notebook „Mekatron 2 – trenowanie modelu z bazy” znajduje się pod adresem: https://colab.research.google.com/drive/1wcAU5nNtFXas6euBA9Hf-jCtygZDWET9.
Natomiast notebook „Synteza Tacotron2” – służący do syntezy głosu, dostępny jest pod tym adresem: https://colab.research.google.com/drive/1gsPMm4mBD71WcTftEffMs3-N89HlD1ju.
Użytkownik Vojak utworzył również pełną instrukcję wideo, jak skorzystać z tego skoroszytu, dlatego wszystkich zainteresowanych zapraszam do playlisty na jego kanale: https://youtube.com/playlist?list=PL_HnfPiIz3S20_35O_lXq77DrFxFV3t0t.
Vocaloid – gdy „sztuczna inteligencja” tworzy gwiazdy
Ćwiczyliśmy modele, generowaliśmy ludzką mowę, dlaczego więc nie zacząć tworzyć muzyki? Vocaloid to dosyć leciwy projekt stworzony przez firmę Yamaha, z czasem jednak rozwijający się w kierunku uczenia maszynowego. Technologia oparta na tzw. „sztucznej inteligencji”, przeznaczona głównie dla osób zajmujących się produkcją muzyczną. Pozwalająca przy pomocy samego programu stworzyć muzykę, na podstawie wpisanego tekstu wygenerować do niej wokal (z dostępnych w programie modeli głosu), jak i dograć własny, który później zostanie przetworzony na głos postaci, którą wybierzemy. Innymi słowy pozwala stworzyć w pełni cyfrowo, pełną warstwę wokalną i muzyczną dla naszych utworów.
Projekt ten dał życie m.in. tak znanej gwieździe japońskiej muzyki, jak Miku Hatsune. Wirtualnej wokalistce stworzonej na bazie syntezy śpiewu, będącej również tzw. modelem „Character Voice 01”, której imię w wolnym tłumaczeniu oznaczającym „pierwszy dźwięk przyszłości”. Popularność tej wirtualnej gwiazdy szeroko wyszła poza Japonię i od 2009 roku, corocznie na całym świecie organizowane są koncerty na żywo, w których udział bierze ona, w postaci realistycznego hologramu. Obecnie oficjalne kanały FB oraz YT postaci zrzeszają po 2.4 mln obserwujących, a bilety na jej koncerty rozchodzą się błyskawicznie. Czy więc w przyszłości czeka nas rewolucja muzyczna na tę generowaną cyfrowo? Kto wie… Poniżej załączam krótki fragment koncertu na żywo z 2016 i 2021 roku, udostępniony przez autorów.
Darmowa, 31 dniowa wersja trial oprogramowania dostępna jest pod adresem: https://www.vocaloid.com/en/vocaloid6/trial/.
I Ty możesz stać się wielkim twórcą muzycznym!
Autor: Daniel 'zoNE’ Gabryś