import subprocess
import os
import whisper
import zhconv
import json
def time2ffmpeg_time(ti):
h=int(ti//3600)
ti%=3600
m=int(ti//60)
ti%=60
s=int(ti)
ms=f'{ti:.2f}'[-2:]
return f'{h:02d}:{m:02d}:{s:02d}.{ms}'
file='test.mp4'
if not file.endswith('.wav'):
subprocess.run(f'ffmpeg -i {file} test.wav',shell=True)
file='test.wav'
model=whisper.load_model('small')
result=model.transcribe(file,language='Chinese')
# with open(f'test.json','w',encoding='utf8') as f:
# json.dump(result,f,ensure_ascii=False,indent=4)
if not os.path.exists('some_wavs'):
os.mkdir('some_wavs')
# with open('test.json','r',encoding='utf8') as f:
# result=json.load(f)
for segment in result['segments']:
s_text=zhconv.convert(segment['text'],'zh-hans')
print(f'{segment["id"]}/{len(result("segments"))}')
print(f'ffmpeg -i test.wav -vn -acodec copy -ss {time2ffmpeg_time(segment["start"])} -to {time2ffmpeg_time(segment["end"])} some_wavs/"{segment["id"]:03d}_{s_text}.wav"')
subprocess.run(f'ffmpeg -i test.wav -vn -acodec copy -ss {time2ffmpeg_time(segment["start"])} -to {time2ffmpeg_time(segment["end"])} some_wavs/"{segment["id"]:03d}_{s_text}.wav"') # -vn video no
# print(result)
result的结构是:
{
"text": "大家好,今天和大家簡單介紹一下Stable Diffusion的原理這期視頻是為了喜歡用Stable Diffusion YBOI但是不太了解背後原理的同學們大致了解一下它背後的技術我們首先粗略講一下什麼是模型方便沒了解過的朋友了解一下模型你可以想像成是一個數學公式有很多參數組成通過不斷輸入數據來慢慢調整這些參數使得輸出是我們想要的結果上面的是神經網絡裡的桿子器左邊I可以到XN是輸入經過計算的出一個輸出這裡的W一當和B就是需要學習的參數這個輸出又會是下一層桿子網絡中的其中一個輸入通過層層計算最後得出結果這個是可是畫後的神經網絡用來識別手寫的數字0到9裡面的每一個點就是剛才的桿子器可想而知有多少參數在這裡面這個孩子是識別0比9像XGPT這種大模型訓練數據是8000一個單詞的語料庫訓練出來的模型有1751個參數平時在CP-Ti下載的拆範圍的模型就是這些訓練好的參數回到今天的主題什麼是Stable DiffusionStable Diffusion是一個文本到圖像生成的模型是由Serberity AIComplete才軟為合作開發並由於Ruser AI和Line提供支持訓練數據則是Line的開源數據你可能聽過Stable DiffusionLaden Diffusion Model等等我先來快速的說說這些之間的關係對不熟悉的朋友可能會比較容易混亂首先是Diffusion Model中文叫擴散模型目前的道義MiscellanyStable Diffusion圖片生成的核心都是擴散模型Laden Diffusion Model中文叫潛在擴散模型是擴散模型的一種辯題最大的區別在於它是先把圖片壓縮降低微度壓縮後所在的空間就叫潛在空間也就是Laden Space這麼做的好處是可以大幅度減少計算量而Stable Diffusion就是基於Laden Diffusion Model開發出來的這也是為什麼它可以在普通的GPU上也能夠運行的原因而Stable Diffusion YVOI則是在Stable Diffusion基礎上開發的應用它把原本繁瑣的安裝配置做成了容易操作的網頁介面並後續加入了很多插件使得它成為了最受歡迎的基於Stable Diffusion的應用這裡說明一下Diffusion Model不是只能用於圖片生成其他領域一樣可以像是音頻、視頻、場景都有相關的研究在進行接下來我們就看看Stable Diffusion背後的原理Stable Diffusion而大致有三個模型組成首先是一個Clean不模型在這裡用它的文本編碼器把文字轉換成像量作為輸入然後就是擴散模型用來生成圖片因為它是在圖片壓縮降微後的潛在空間進行所以擴散模型的輸入和輸出都是潛在空間的圖像特徵而不是圖片本身的像素最後一個是VAE模型在這裡用它的解碼器把潛在空間的圖像特徵還原成圖片接下來我們重點看一下Diffusion模型的原理首先給定一張圖片在這張圖片上我們隨機的添加一些噪聲也就是高濕噪聲然後我們再添加一些噪聲一步一步加上去直到只剩下噪聲然後我們再訓練一個網絡把它從噪聲一步一步還原到原來的圖片那麼為什麼要噪聲為什麼要這麼麻煩要一步一步來而不訓練一個網絡一步到位呢因為直接移除像素會導致信息上失添加噪聲則可以讓模型更加學習到圖片的特徵而且隨機噪聲還增加了模型生成時的多樣性而一步一步的來可以控制這一過程同時提高了去照過程中的穩定性那每一步要添加多少噪聲呢這個根據一個SkyZoo來決定不同的SkyZoo有不同的方法可以是每次相同的量也可以是一開始加的少後面加的多先少後多比較好圖片特徵損失的比較慢因為高速噪聲可以直接加一起並不需要真的一步一步添加噪聲所以訓練的時候直接把隨機數量的噪聲添加去圖片進去讓訓練的網絡還原圖片那現在我們就來看看還原圖片的過程首先我們從訓練數據裡拿一張圖片在裡面添加一定量的噪聲假設添加步數等於50的時候的噪聲然後我們有一個優文案神經網絡通過輸入圖片和不輸50可以預測出圖片中的噪聲輸入不輸50是因為這個網絡是每一步都共用的所以要讓它知道目前預測的噪聲數量大概是多少至於YOU那的結構這裡就不細說了YOU那結構大概長這樣這圖的文章輸出鏈接我會放在下面選用YOU和那結構的網絡來預測是因為它的效果比較好現在我們只需要把有輸入的圖片剪去噪聲就能得到原圖但是當噪聲很多的時候網絡並無法預測精準的圖片細節只能預測一個很模糊的大概的人擴這時候我們把它當作圓圖然後在添加比之前少一點的噪聲進去然後再預測它的噪聲這樣不斷重複直到得到圓圖這裡可以看一下不斷預測噪聲的整個過程這裡的噪聲看著和之前不一樣是因為這個是從前在空間還原出來的噪聲接下來我們看看如何把文字的內容加進去引導圖片生成我們想要的內容首先先把文字用CLEE模型轉成文本特徵CLEE模型只能用英文作為輸入不能用中文然後把文本特徵也加入到YOU Night的輸入當中為了加入文本特徵YOU Night你添加了的參勝也就是注意力極致QQV適合參勝的輸入它光是長這樣然後我們還是一樣預測它的噪聲但是如果只按之前的做法最後生成的圖片只是有點像我們的文本輸入並不能得到精確描述文本內容的圖片這裡我們用到一個叫而Class Fire Free Guidance的方法去加強引導我們首先預測兩個噪聲一個是有文本特徵引導一個則是沒有然後兩個相簡得到的就是在文本引導下改變了的不同的地方然後我們把這種改變了的信號放大假設放大7.5倍然後加去沒有文本特徵引導的噪聲這就得到了一個加強了文本引導的噪聲這個就是WEBY上面的Guidance Scale這個數值通常在6 7左右這裡可以看一下不同數值最後出來的圖片效果這後面就和之前一樣簡趣噪聲得到模糊的圓圖重新加上噪聲再輸入到UNOT繼續預測直到生成圓圖順帶一提YBUI上的富像提示詞是預測有真相提示詞的噪聲和富像提示詞的噪聲兩個相簡時的預測更加遠離富像提示詞的圖像講到這裡擴散模型的基本原理就講完了接下來我們就來看一下VAEVAE全春VVS No AutoCoder中文教辨分字編碼器簡單來說它有一個編碼器和解碼器也就是NCoder和Decoder輸入一張圖片經過編碼器得到潛在空間裡的特徵然後再把特徵輸入到解碼器還原到原來的圖片它詳細解構這裡就不細說了大概長這樣其實VAE的編碼器本身也是學習一個概率所以VAE也可以隨機採樣生成圖片我會把相關鏈接放在下面有興趣的可以去看看所以在Bestable Diffusion你訓練的時候它是先用VAE的編碼器把圖片壓縮到潛在空間然後在潛在空間裡訓練擴散模型所以擴散模型的輸入輸出都是潛在空間裡的特徵而不是圖片本身的像素所以在推理的時候也就是生成圖片的時候它一開始隨機造生也是在潛在空間裡生成的用VAE的好處就是可以大大減少訓練和推理的時間和硬件需求因為本來訓練的圖片是512X5-2壓縮後是64X64減少了很多有好處當然也有壞處因為是壓縮過在還原不多不少都會損失掉一些細節順帶一提VAE是預先訓練好的擴散模型訓練的時候直接拿來用VAE到這裡就講完了最後來看一下Clip模型Clip全稱跟Trustive Language Image Pui Training大概意思就是用文字和圖像做對比的預訓練模型它的作用就是把文本和圖像聯繫起來Clip是由一個文本編碼器會一個圖像編碼器組成它的訓練級也是文字圖片隊訓練的時候用一組組文字圖片隊做對比經過編碼器分別得到文本特徵和圖像特徵然後計算兩個特徵的相似度訓練好以後對應的文字圖片相似度會很高不對應得則很低這樣就可以把文字和圖片聯繫起來Stable Diffusion也是直接用Open Eye訓練好的Clip模型Clip模型雖然是Open Eye開源的模型但是它的訓練級沒有公開所以Stable Diffusion的二版本換成了另一個Clip模型Lion的Open Clip模型訓練級用的Lion的開源數據Stable Diffusion離此用了Clip lead文本編碼器沒有用到圖像編碼器Clip模型到這裡就講完了我們現在來回顧一下整個Stable Diffusion的結構首先把訓練的圖片經過VAE編碼器壓縮降為到潛在空間然後根據Skyzler來添加噪聲之後就從噪聲開始推理把噪聲和T多輸入到U、Nitety同時把文本引導經過Clip編碼器也輸入到U、NitetyU、Nitety吹噪聲後經過計算得到前一步的噪聲圖這樣一直重複T步直到得到沒有噪聲的圖像特徵最後經過VAE編碼器還原成圖片Stable Diffusion最不同的是把圖像重向速空間壓縮到潛在空間處理訓練好以後生成圖片只需要下半部分的反向擴散過程就行隨機生成噪聲再推理這裡可以看一下論文的原圖條件引導不一定是文本其他的都可以轉成特徵去引導Stable Diffusion的原理到這裡就講完了關於其他那些微調模型訓練方法這裡就不詳細解釋了只出略講一下YouTube上有個視頻講解得很詳細我會把鏈接放下面當然第一步你要準備自己想訓練的圖片集後關鍵詞關鍵詞要儘量特別儘量是模型沒見過的不然模型會搞混注意不值的話是直接用新的圖片和關鍵詞去調整You那裡的參數所以保存的時候要保存整個修改過的模型所以文件很大LowR則是在YouNot any加一些程然後去訓練這些程去調整You and Night的輸出保存的時候只需要保存這些程所以文件比較小所以使用的時候需要基礎模型Tax Wang Yuan version倒話很特別它是調整可以讓它輸出符合新圖片的文本特徵所以這類型文件更加小只需要保存學習到的特徵最後就是看True or Not它是通過訓練另外一個神經網絡去調整You、Night這個網絡就可以輸入那些用來作為控制條件的圖像例如谷歌什麼的到這裡就全部講完了這個視頻是為了能讓大家有一個大概的了解有興趣想更深入了解背後細節的同學們可以參考下面的鏈接希望這個視頻能幫助到大家了解而Stable Diffusion別的基本原理非常感謝各位的觀看再會",
"segments": [
{
"id": 0,
"seek": 0,
"start": 0.0,
"end": 3.8000000000000003,
"text": "大家好,今天和大家簡單介紹一下Stable Diffusion的原理",
"tokens": [
50364,
15248,
11,
12074,
12565,
6868,
31995,
30312,
38193,
8861,
4520,
712,
413,
3661,
5704,
1546,
19683,
13876,
50554
],
"temperature": 0.0,
"avg_logprob": -0.17613909257020002,
"compression_ratio": 1.3582474226804124,
"no_speech_prob": 0.05497151240706444
},
{
"id": 1,
"seek": 0,
"start": 3.8000000000000003,
"end": 6.76,
"text": "這期視頻是為了喜歡用Stable Diffusion YBOI",
"tokens": [
50554,
2664,
16786,
27333,
29940,
1541,
6344,
2289,
21385,
9254,
4520,
712,
413,
3661,
5704,
398,
15893,
40,
50702
],
"temperature": 0.0,
"avg_logprob": -0.17613909257020002,
"compression_ratio": 1.3582474226804124,
"no_speech_prob": 0.05497151240706444
},
...
],
"language": "Chinese"
}
制作出的转录文本还需要微调优化
参考链接:ffmpeg切割音频文件
创建于2501081800,修改于2501081800
标签:Diffusion,批量,圖片,whisper,模型,噪聲,訓練,语音,一個 From: https://www.cnblogs.com/tellw/p/18660293