DL-C- und teilweise DL-D-Demonstration • AI Society
Bei diesem Open Source handelt es sich um DL-B, eine digitale Bildlösung, die auf ChatGLM, Wav2lip und so-vits-svc basiert. Die Codebasis wurde Mitte März 2023 geschrieben und seitdem weder optimiert noch aktualisiert.
Ich beteilige mich derzeit an diesem Projekt. Der Wettbewerb wird Ende Juni in die Provinzwettbewerbsphase eintreten. Das Projektteam treibt derzeit die anschließende Optimierung und Verbesserung von DL-C sowie die Erprobung und Entwicklung von DL-D voran. Bis zum Ende des Wettbewerbs werden keine Codes und Details zu DL-C und DL-D veröffentlicht. Der Code und das detaillierte Framework werden nach dem Wettbewerb zusammengestellt und aktualisiert. Ich habe vergessen zu vergeben.
Der aktuelle Code ist zu starr. Ich bin ein Student im zweiten Jahr mit Schwerpunkt Finanzen. Ich habe keine ästhetischen oder technischen Fähigkeiten im Codeschreiben (C+V seltsam).
Nach dem Wettbewerb wird das Projekt von der AI Society übernommen und in Zukunft ein benutzerfreundliches Framework mit einem Full-Process-Lazy-Paket erstellt.
Die für die DL-B-Produktion verwendete Plattform wird hier als Referenz bereitgestellt (Sie können gerne als Ergänzung niedriger lauffähige Konfigurationen vorschlagen).
Grafikkarte | CPU | Erinnerung | Festplatte |
---|---|---|---|
RTX 3060 12G | Intel i5-12400F | 16 GB | 30G |
Die Testumgebung basiert auf Python 3.9.13 64-Bit
Verwenden Sie pip, um Abhängigkeiten zu installieren: pip install -r requirements.txt
Bitte beachten Sie, dass Sie zum Ausführen von So-VITS noch ein Python 3.8-Umgebungspaket herunterladen müssen (klicken Sie auf das Umgebungspaket), aber keine Sorge, ich habe es bereits für Sie konfiguriert, Sie müssen es nur herunterladen und entpacken im DL-B-Ordner und behalten Sie den Dateipfad bei
DL-B
├───python3.8
├───Lib
├───libs
├───···
└───Tools
Darüber hinaus müssen Sie auch ffmpeg installieren. Wenn Sie es nicht manuell installieren möchten, können Sie es auch mit dem von uns bereitgestellten Lazy-Paket versuchen.
ChatGLM verfügt über viele Feinabstimmungsmethoden, und Benutzer können die geeignete Feinabstimmungsmethode entsprechend ihrer tatsächlichen Situation auswählen. Beamte der Tsinghua-Universität gaben eine detaillierte Erläuterung der Feinabstimmung von ChatGLM durch P-Tuning. Auf Github gibt es eine bessere Beispielbibliothek für die Feinabstimmung, die Zhen Huan als Beispiel für die Feinabstimmung verwendet. Diese Bibliothek enthält den Code für die P-Tuning -Feinabstimmung, jedoch nicht das vorab trainierte Modell von ChatGLM.
Das Programm lädt automatisch die Modellimplementierung und die Parameter von transformers
herunter. Die vollständige Modellimplementierung finden Sie in Hugging Face Hub. Wenn Ihre Netzwerkumgebung schlecht ist, kann das Herunterladen der Modellparameter lange dauern oder sogar fehlschlagen. Zu diesem Zeitpunkt können Sie das Modell zunächst lokal herunterladen und dann von lokal laden.
Um das Modell von Hugging Face Hub herunterzuladen, müssen Sie zuerst Git LFS installieren und dann ausführen
git clone https://huggingface.co/THUDM/chatglm-6b
Wenn Sie den Prüfpunkt nur langsam von Hugging Face Hub herunterladen, können Sie nur die Modellimplementierung herunterladen.
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/THUDM/chatglm-6b
Laden Sie dann die Modellparameterdatei manuell von hier herunter und ersetzen Sie die heruntergeladene Datei im lokalen Verzeichnis module/chatglm-6b
.
Die Umsetzung des optionalen Modells ist noch im Fluss. Wenn Sie die verwendete Modellimplementierung korrigieren möchten, um die Kompatibilität sicherzustellen, können Sie sie ausführen
git checkout v0.1.0
Verwenden Sie Ihren eigenen Datensatz
Hier finden Sie eine hilfreiche Bibliothek zum Sammeln persönlicher Korpusse
Ändern Sie train_file
, validation_file
und test_file
in train.sh
und evaluate.sh
in Ihren eigenen Datensatzpfad im JSON-Format und ändern Sie prompt_column
und response_column
in den SCHLÜSSEL, der dem Eingabetext und Ausgabetext in der JSON-Datei entspricht. Möglicherweise müssen Sie auch max_source_length
und max_target_length
erhöhen, um sie an die maximalen Eingabe- und Ausgabelängen in Ihrem eigenen Datensatz anzupassen.
Konversationsdatensatz
Wenn Sie zur Feinabstimmung des Modells Konversationsdaten mit mehreren Runden verwenden müssen, können Sie den Chat-Verlauf bereitstellen. Im Folgenden finden Sie beispielsweise die Trainingsdaten einer Konversation mit drei Runden:
{ "prompt" : "长城h3风扇不转。继电器好的。保险丝好的传感器新的风扇也新的这是为什么。就是继电器缺一个信号线" , "response" : "用电脑能读数据流吗?水温多少" , "history" : []}
{ "prompt" : " 95 " , "response" : "上下水管温差怎么样啊?空气是不是都排干净了呢? " , "history" : [[ "长城h3风扇不转。继电器好的。保险丝好的传感器新的风扇也新的这是为什么。就是继电器缺一个信号线" , "用电脑能读数据流吗?水温多少" ]]}
{ "prompt" : "是的。上下水管都好的" , "response" : "那就要检查线路了,一般风扇继电器是由电脑控制吸合的,如果电路存在断路,或者电脑坏了的话会出现继电器不吸合的情况! " , "history" : [[ "长城h3风扇不转。继电器好的。保险丝好的传感器新的风扇也新的这是为什么。就是继电器缺一个信号线" , "用电脑能读数据流吗?水温多少" ], [ " 95 " , "上下水管温差怎么样啊?空气是不是都排干净了呢? " ]]}
Während des Trainings müssen Sie --history_column
als Schlüssel des Chat-Verlaufs in den Daten angeben (in diesem Beispiel history
), und der Chat-Verlauf wird automatisch gespleißt. Bitte beachten Sie, dass Inhalte, die die Eingabelänge max_source_length
überschreiten, abgeschnitten werden.
Sie können sich auf die folgenden Anweisungen beziehen:
bash train_chat.sh
Natürlich können Sie auch den Korpus aus Mehrrundendialogen und Einzelrundendialogen miteinander kombinieren. Fügen Sie einfach den folgenden Dialogmodus direkt oben hinzu.
{ "prompt" : "老刘,你知道那个作业要怎么从电脑上保存到手机上吗? " , "response" : "我也不知道啊" , "history" :[]}
So-VITS ist bereits ein sehr beliebtes und ausgereiftes Modell, und auf Station B gibt es viele Lehrvideos, daher werde ich hier nicht auf Details eingehen. Hier sind Tutorials, die meiner Meinung nach von sehr hoher Qualität und Essenz sind. Diese Bibliothek enthält den Code für die Grundschulung und das Clustering-Training von So-VITS, ist jedoch nicht sehr benutzerfreundlich, und nach ihrer Fertigstellung im März wurden keine Änderungen am Inhalt in DL-B vorgenommen. Was hier benötigt wird dass diese Bibliothek keine Tools zur Datenverarbeitung und Vorvorbereitung enthält.
Es gibt einige Modelldateien, die vervollständigt werden müssen: checkpoint_best_legacy_500.pt, abgelegt unter hubert
, und zwei passende vorab trainierte Modelle G_0.pth und D_0.pth, abgelegt in den Ordnern .moduleSo-VITS
und pre_trained_model
.
Dies ist eine ältere Methode, und im neuesten Framework wurden viele Optimierungen vorgenommen. Diese Version basiert auf dem ursprünglichen Wav2Lip und Benutzer können verschiedene Modellgewichte vor dem Training auswählen. Das Modell hier muss heruntergeladen werden und befindet sich im Ordner .modulewav2lip
.
Modell | beschreiben | Link |
---|---|---|
Wav2Lip | Hochpräzise Lippensynchronisation | Link |
Wav2Lip+GAN | Die Lippensynchronisation ist etwas schlechter, aber die visuelle Qualität ist besser | Link |
Experte für Diskriminierung | Link | |
Visueller Qualitätsdiskriminator | Link |
Es ist zu beachten, dass diese Bibliothek einige Videos sammeln muss, die mit Mobiltelefonen, Computern oder Kameras aufgezeichnet werden können. Das empfohlene Format ist .mp4
und die Auflösung ist 720p
oder 480p
beträgt normalerweise 5–10 Sekunden. Speichern Sie die Videodateien im source
.
Was die Optimierung von Wan2lip betrifft, haben es bereits viele große Leute auf Station B gemacht, daher werde ich nicht auf Details eingehen (faul). Hier ist ein Video.
Beachten Sie, dass Sie zusätzlich zum oben genannten Inhalt auch ein Modell s3fd.pth herunterladen müssen, das während des Inferenzprozesses verwendet werden muss, und es im Ordner .face_detectiondetectionsfd
ablegen müssen
Diese Bibliothek enthält keine Modelle! ! Es kann nicht verwendet werden, nachdem es direkt gezogen wurde! ! Es ist notwendig, das Modell zu trainieren
Der Quellcode muss an folgenden Stellen geändert werden:
Platzieren Sie alle fein abgestimmten Modelle in den entsprechenden Ordnern im module
. Bitte kopieren Sie alle ausgegebenen Dateien nach output
P-Tuning -Training in die entsprechende lokale output
. So-VITS/44k
wird zum Speichern von So-VITS-Trainingsmodellen verwendet. Das wav2lip+GAN-Modell wird im Ordner wav2lip
gespeichert.
Ändern Sie in Zeile 32 von main_demo.py
CHECKPOINT_PATH
nach persönlicher Feinabstimmung in das Modell
prefix_state_dict = torch . load ( os . path . join ( CHECKPOINT_PATH , "pytorch_model.bin" ))
Beachten Sie, dass Sie während Ihres Trainings möglicherweise pre_seq_len
auf den tatsächlichen Wert ändern müssen. Wenn Sie das Modell lokal laden, müssen Sie THUDM/chatglm-6b
in den lokalen Modellpfad ändern (beachten Sie, dass es sich nicht um den Prüfpunktpfad handelt).
Die Standardschreibmethode im Quellcode besteht darin, einen neuen Prüfpunkt zu laden (der nur den PrefixEncoder-Parameter enthält).
Wenn Sie den alten Checkpoint laden müssen (einschließlich ChatGLM-6B- und PrefixEncoder-Parameter) oder eine vollständige Feinabstimmung der Parameter durchführen müssen, laden Sie den gesamten Checkpoint direkt:
model = AutoModel . from_pretrained ( CHECKPOINT_PATH , trust_remote_code = True )
Fügen Sie den Modellpfad und den Sprechernamen zu So-VITS_run.py
hinzu (abhängig von Ihren Trainingseinstellungen).
parser . add_argument ( '-m' , '--model_path' , type = str , default = "" , help = '模型路径' )
parser . add_argument ( '-s' , '--spk_list' , type = str , nargs = '+' , default = [ '' ], help = '合成目标说话人名称' )
Sie müssen wav2lip_run.py
herunterladen:
#VIDEO
face_dir = "./source/"
Nehmen Sie Änderungen vor. Das hier aufgerufene Video ist das zuvor aufgenommene Video. Sie können Ihren eigenen Videoauswahlplan erstellen.
Kein Wunder, führen Sie main_demo.py
einfach direkt in VScode oder einer anderen Software aus. Viel Spaß euch allen.
Der Code dieses Repositorys ist Open Source gemäß der GNU GPLv3-Vereinbarung. Die Gewichtsverwendung jedes Modells muss seiner Open-Source-Vereinbarung entsprechen.