Skip to content

本次开源为DL-B,是一个基于ChatGLM、Wav2Lip、So-VITS组建的数字形象方案。可以在此基础之上增加其他组件达到数字生命的效果。This open source is DL-B, which is a digital image scheme based on ChatGLM, Wav2Lip and So-VITS. On this basis, other components can be added to achieve the effect of digital life.

License

Notifications You must be signed in to change notification settings

ybiu/Digital-Life-DL-B

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Digital Life DL-B

DL-B

🌐 DL-C&部分DL-D演示 •🌐 AI学社

介绍

本次开源为DL-B,是一个基于ChatGLMWav2lipso-vits-svc组建的数字形象方案。代码库在2023年3月中旬编写完毕,之后未进行优化以及更新。

目前本人正在依此项目进行比赛,比赛将于6月下旬进入省赛阶段,目前项目组推进至DL-C的后续优化完善以及DL-D的测试开发。在比赛结束之前不会公开任何关于DL-C以及DL-D的代码以及细节部分,代码以及详细框架将会在比赛结束后经过整理发布更新。忘见谅。

目前代码过于生硬,本人为本科大二学生,学习金融专业,在代码编写方面毫无审美以及技术可言(C+V怪),大佬勿喷。

在比赛结束之后项目将会由AI学社接手推进,后续将会制作面向用户友好的框架,全流程懒人包。

硬件需求

此处提供DL-B制作是使用的平台作为参考(欢迎提出更低可运行配置作为补充)

显卡 CPU 内存 硬盘
RTX 3060 12G Intel i5-12400F 16 GB 30G

环境安装(整理匆忙,环境包混乱,存在bug感谢提出)

测试环境基于Python 3.9.13 64-bit

使用 pip 安装依赖:pip install -r requirements.txt

需要注意,你仍然需要下载一个Python 3.8的环境包用于So-VITS的运行(点击环境包即可),不过不用担心,我已经替你配置好了,你只需要下载并解压在DL-B文件夹中,并且保持文件路径

DL-B
├───speaker0
   ├───Lib
   ├───libs
   ├───···
   └───Tools

除此之外,还需要安装ffmpeg,如果你不想自己手动安装,也可以尝试使用我们提供的懒人包

模型训练

ChatGLM

ChatGLM拥有很多微调方式,用户可以根据自己的实际情况选择合适的微调方式。清华大学官方对于P-tuning对ChatGLM的微调进行了详尽的说明。在Github上有一个较好的微调示例库,是以甄嬛为例的微调。此库包含P-tuning微调的代码,但并不包含ChatGLM的预训练模型。

程序会由 transformers 自动下载模型实现和参数。完整的模型实现可以在 Hugging Face Hub。如果你的网络环境较差,下载模型参数可能会花费较长时间甚至失败。此时可以先将模型下载到本地,然后从本地加载。

从 Hugging Face Hub 下载模型需要先安装Git LFS,然后运行

git clone https://huggingface.co/THUDM/chatglm-6b

如果你从 Hugging Face Hub 上下载 checkpoint 的速度较慢,可以只下载模型实现

GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/THUDM/chatglm-6b

然后从这里手动下载模型参数文件,并将下载的文件替换到本地的 module/chatglm-6b 目录下。

Optional 模型的实现仍然处在变动中。如果希望固定使用的模型实现以保证兼容性,可以执行

git checkout v0.1.0

使用自己的数据集

这里提供一个有一点帮助的收集个人语料的

修改 train.shevaluate.sh 中的 train_filevalidation_filetest_file为你自己的 JSON 格式数据集路径,并将 prompt_columnresponse_column 改为 JSON 文件中输入文本和输出文本对应的 KEY。可能还需要增大 max_source_lengthmax_target_length 来匹配你自己的数据集中的最大输入输出长度。

对话数据集

如需要使用多轮对话数据对模型进行微调,可以提供聊天历史,例如以下是一个三轮对话的训练数据:

{"prompt": "长城h3风扇不转。继电器好的。保险丝好的传感器新的风扇也新的这是为什么。就是继电器缺一个信号线", "response": "用电脑能读数据流吗?水温多少", "history": []}
{"prompt": "95", "response": "上下水管温差怎么样啊?空气是不是都排干净了呢?", "history": [["长城h3风扇不转。继电器好的。保险丝好的传感器新的风扇也新的这是为什么。就是继电器缺一个信号线", "用电脑能读数据流吗?水温多少"]]}
{"prompt": "是的。上下水管都好的", "response": "那就要检查线路了,一般风扇继电器是由电脑控制吸合的,如果电路存在断路,或者电脑坏了的话会出现继电器不吸合的情况!", "history": [["长城h3风扇不转。继电器好的。保险丝好的传感器新的风扇也新的这是为什么。就是继电器缺一个信号线", "用电脑能读数据流吗?水温多少"], ["95", "上下水管温差怎么样啊?空气是不是都排干净了呢?"]]}

训练时需要指定 --history_column 为数据中聊天历史的 key(在此例子中是 history),将自动把聊天历史拼接。要注意超过输入长度 max_source_length 的内容会被截断。

可以参考以下指令:

bash train_chat.sh

当然也可以将多轮对话与单轮对话的语料混杂在一起进行,只需在上面的基础之上直接加入如下模式的对话即可

{"prompt":"老刘,你知道那个作业要怎么从电脑上保存到手机上吗?","response":"我也不知道啊","history":[]}

so-vits-svc

So-VITS已经是一个很火很成熟的模型了,在B站上也有很多的教学视频,这里就不进行赘述了。这里提供个人认为质量非常高且精髓的教程。此库中包含有So-VITS的基础训练以及聚类训练的代码,但是面向用户并不是很友好,而且在3月份制作完毕之后就没有再对DL-B中的内容进行任何改动,此处需要注意此库不包含数据处理以及前期准备的工具。

这里有一些需要补全的模型文件checkpoint_best_legacy_500.pt,放置在hubert下 以及两个配套的预训练模型G_0.pth以及D_0.pth放置在.\module\So-VITS以及pre_trained_model文件夹下。


Wav2Lip

这是一个较为古早的方法,在最新的框架中已经做了很多的优化,该版本是基于原始的Wav2Lip进行的制作,用户可以自己选择不同的预训练模型权重。此处模型为必须下载项,放置在.\module\wav2lip文件夹下。

模型 描述 链接
Wav2Lip 高精度的唇同步 链接
Wav2Lip+GAN 对口型稍差,但视觉质量较好 链接
Expert Discriminator 链接
Visual Quality Discriminator 链接

需要注意,此库需要采集部分视频,可以使用手机、电脑或者相机进行录制,用于采集人面部信息,建议格式为.mp4,分辨率为720p480p,单个视频时常为5-10s为妙,可以采集多个视频。将视频文件存放在source文件夹下。

关于Wan2lip的优化,在B站上也有许多大佬已经做出来了,也就不进行赘述了(lazy),这里提供一个视频

注意,除上述内容,还需要下载一个在推理过程中需要用到的模型s3fd.pth放置在.\face_detection\detection\sfd文件夹下


源码更改

此库中不包含任何模型!!直接拉取后无法使用!!必须要训练模型

源码一共在如下几处需要进行更改


将所有微调好之后的模型放入module中的相应文件夹下。请将P-tuning训练完后输出至output中的所有文件复制到本地对应的output中。So-VITS/44k下用于存放So-VITS的训练模型。wav2lip文件夹下为以存放好的wav2lip+GAN模型。


main_demo.py的第32行中CHECKPOINT_PATH更改为个人微调之后的模型

prefix_state_dict = torch.load(os.path.join(CHECKPOINT_PATH, "pytorch_model.bin"))

注意你可能需要将 pre_seq_len 改成你训练时的实际值。如果你是从本地加载模型的话,需要将 THUDM/chatglm-6b 改成本地的模型路径(注意不是checkpoint路径)。

源码中默认的写法为加载的是新 Checkpoint(只包含 PrefixEncoder 参数)

如果需要加载的是旧 Checkpoint(包含 ChatGLM-6B 以及 PrefixEncoder 参数),或者进行的是全参数微调,则直接加载整个 Checkpoint:

model = AutoModel.from_pretrained(CHECKPOINT_PATH, trust_remote_code=True)

So-VITS_run.py中加入模型路径以及说话人名称(取决于你训练时的设置)

 parser.add_argument('-m', '--model_path', type=str, default="", help='模型路径')
parser.add_argument('-s', '--spk_list', type=str, nargs='+', default=[''], help='合成目标说话人名称')

需要对wav2lip_run.py下:

#VIDEO
face_dir = "./source/"

进行更改,此处调用的为前面录制好的视频,可以自行编写视频选择方案。


不出意外,最后直接在VScode或者其他的软件中运行main_demo.py即可。祝大家玩的开心。

协议

本仓库的代码依照 Apache-2.0 协议开源。各模型的权重使用则需遵循其开源时的协议。

About

本次开源为DL-B,是一个基于ChatGLM、Wav2Lip、So-VITS组建的数字形象方案。可以在此基础之上增加其他组件达到数字生命的效果。This open source is DL-B, which is a digital image scheme based on ChatGLM, Wav2Lip and So-VITS. On this basis, other components can be added to achieve the effect of digital life.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 99.2%
  • Other 0.8%