DL-C&部分DL-D演示• AI學社
本次開源為DL-B,是基於ChatGLM、Wav2lip、so-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 |
測試環境基於Python 3.9.13 64-bit
使用pip 安裝依賴: pip install -r requirements.txt
要注意,你還是需要下載一個Python 3.8的環境包用於So-VITS的運行(點擊環境包即可),不過不用擔心,我已經替你配置好了,你只需要下載並解壓在DL-B資料夾中,並且保持檔案路徑
DL-B
├───python3.8
├───Lib
├───libs
├───···
└───Tools
除此之外,還需要安裝ffmpeg,如果你不想自己手動安裝,也可以嘗試使用我們提供的懶人包
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.sh
和evaluate.sh
中的train_file
、 validation_file
和test_file
為你自己的JSON 格式資料集路徑,並將prompt_column
和response_column
改為JSON 檔案中輸入文字和輸出文字對應的KEY。可能還需要增加max_source_length
和max_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已經是一個很火很成熟的模型了,在B站上也有很多的教學視頻,這裡就不進行贅述了。這裡提供個人認為品質非常高且精髓的教學。此庫中包含有So-VITS的基礎訓練以及聚類訓練的程式碼,但是面向用戶並不是很友好,而且在3月份製作完畢之後就沒有再對DL-B中的內容進行任何改動,此處需要注意此庫不包含資料處理以及前期準備的工具。
這裡有一些需要補全的模型檔案checkpoint_best_legacy_500.pt,放置在hubert
下以及兩個配套的預訓練模型G_0.pth以及D_0.pth放置在.moduleSo-VITS
以及pre_trained_model
資料夾下。
這是一個較早的方法,在最新的框架中已經做了很多的優化,該版本是基於原始的Wav2Lip進行的製作,用戶可以自己選擇不同的預訓練模型權重。此處模型為必須下載項,放置在.modulewav2lip
資料夾下。
模型 | 描述 | 連結 |
---|---|---|
Wav2Lip | 高精度的唇同步 | 連結 |
Wav2Lip+GAN | 對口型稍差,但視覺品質較好 | 連結 |
Expert Discriminator | 連結 | |
Visual Quality Discriminator | 連結 |
需要注意,此庫需要採集部分視頻,可以使用手機、電腦或相機進行錄製,用於採集人面部信息,建議格式為.mp4
,分辨率為720p
或480p
,單個視頻時常為5-10s為妙,可以採集多個視訊。將視訊檔案存放在source
資料夾下。
關於Wan2lip的優化,在B站上也有許多大佬已經做出來了,也就不進行贅述了(lazy),這裡提供一個視頻
注意,除上述內容,還需要下載一個在推理過程中需要用到的模型s3fd.pth放置在.face_detectiondetectionsfd
資料夾下
此庫中不包含任何模型! !直接拉取後無法使用! !必須要訓練模型
源碼一共在以下幾處需要進行更改
將所有微調好之後的模型放入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
即可。祝大家玩的開心。
本倉庫的程式碼依照GNU GPLv3 協定開源。各模型的權重使用則需遵循其開源時的協定。