作者 | 崔皓
審校 | 重樓
摘要
本文探討了如何利用大語言模型和AI視頻生成模型來創(chuàng)建高度個性化和創(chuàng)意豐富的視頻內(nèi)容。文章詳細(xì)介紹了從構(gòu)思到實現(xiàn)的全過程,包括問題分析、目標(biāo)設(shè)定、工具和模型選擇,以及實際操作步驟。使用的技術(shù)和工具包括OpenAI的GPT-3.5-turbo、Hugging Face的zerscope_v2_576w模型,以及Langchain、PyTorch等輔助工具。
開篇
在科技日新月異的今天,人工智能不僅僅局限于數(shù)據(jù)分析或自動駕駛等領(lǐng)域,其在創(chuàng)意產(chǎn)業(yè)中的應(yīng)用也越來越廣泛。那么,能不能讓大語言模型與AI視頻生成模型聯(lián)手,為我們帶來高度個性化且極富創(chuàng)意的視頻內(nèi)容呢?本文將介紹如果通過輸入幾個關(guān)鍵詞讓大模型幫助我們生成創(chuàng)意視頻。其中用到了OpenAI,Hugging face開源庫,LangChain等技術(shù)或框架,通過手把手編寫代碼,查找資料的方式呈現(xiàn)完整的開發(fā)過程。
突發(fā)奇想
在瀏覽社交媒體時,我經(jīng)??吹礁鞣N精彩絕倫的創(chuàng)意視頻。每次看到這些,我都忍不住想:如果我也能制作出這樣的作品,該有多好!但問題是,我作為一個碼農(nóng)對創(chuàng)意這件事一直不太自信。那么如何能夠創(chuàng)建屬于自己的創(chuàng)意視頻呢?
突然,我想到了大語言模型和AI視頻生成技術(shù)。大語言模型擅長生成文本,而AI視頻生成模型則能從文本生成視頻。那么,它們能否聯(lián)手,幫助我填補這一創(chuàng)意缺口呢?
思路整理:明確目標(biāo),分解任務(wù)
在有了初步的想法后,下一步就是具體地整理思路,明確我們需要解決哪些問題。這樣不僅能讓我們有目標(biāo)可行,還能為后續(xù)的行動計劃提供明確的方向。以終為始,我們的目標(biāo)就是讓計算機(jī)幫我們自動生成創(chuàng)意視頻,那么就可以分割為產(chǎn)生創(chuàng)意和生成視頻兩個環(huán)節(jié)。
問題一:創(chuàng)意缺乏,如何解決?
對于大多數(shù)碼農(nóng)來說,創(chuàng)意并不是我們的強項。但是好消息是,現(xiàn)在有大語言模型能夠在這方面幫助我們。通過合理地設(shè)置提示(prompt)或者利用現(xiàn)有的模板,我們甚至能生成具體的創(chuàng)意腳本。
我的初步想法如下:
1. 查找合適的大語言模型,例如GPT-3.5-turbo。
2. 設(shè)計或找到有效的文本提示模板。
3. 進(jìn)行多輪的文本生成實驗,直到滿意為止。
問題二:如何生成視頻?
生成創(chuàng)意文本后,下一步就是將這些文本轉(zhuǎn)化為視頻。由于我們并不是專業(yè)的視頻制作人員,因此找到一個現(xiàn)成的、用戶友好的AI視頻生成模型將會非常有幫助。
這也難不倒我,通過下面幾步或許能夠如愿以償:
1. 搜尋開源的AI視頻生成模型,到最大的模型庫Hugging face上去找找一定會有收獲。
2. 了解模型的輸入要求和使用方式。
3. 實施初步的視頻生成測試,如果需要,進(jìn)行必要的調(diào)整。
首先,利用大語言模型解決創(chuàng)意問題;其次,利用AI視頻生成模型將創(chuàng)意實現(xiàn)為具體的視頻內(nèi)容。這樣一來,即便我們不是“創(chuàng)意大師”,也完全有能力制作出令人印象深刻的創(chuàng)意視頻。
查找資料:武裝自己的工具箱
通過對目標(biāo)的分析,我們總結(jié)出兩大問題,并且針對每個問題都有了基本的解決思路。接下來需要了解對應(yīng)的工具,同時對工具,框架和庫進(jìn)行測試,從而驗證我們的想法。
接著,我們對技術(shù)做了如下的選擇:
大語言模型:OpenAI的GPT-3.5-turbo
OpenAI是在AI界非常有影響力的組織,其推出的GPT模型家族幾乎成為了大語言模型的代名詞。同時,與其他版本相比,GPT-3.5-turbo的token費用更加實惠,對于個人或小型項目來說非常適用。
這里,我計劃使用GPT-3.5-turbo來生成創(chuàng)意文本。通過設(shè)置特定的提示和參數(shù),我能夠讓模型產(chǎn)生具有高創(chuàng)意價值的文本內(nèi)容。
AI視頻模型:cerspense/zeroscope_v2_576w
在Hugging Face的平臺上,這個模型因其高Star評級而受到了大量關(guān)注,這通常是社群對其有效性的一種認(rèn)可。那么在這個平臺上面如何找到我們需要的模型呢?
首先,登錄平臺,在首頁選擇“Tasks”。
在Tasks中列出所有Hugging face上模型能夠執(zhí)行的任務(wù),并且Hugging face 已經(jīng)對所有的模型進(jìn)行了分類。我們找到“Text-to-Video”的分類,點擊進(jìn)入。
在進(jìn)去的頁面會對這類模型進(jìn)行簡單地介紹。它會告訴你將文本輸入到模型,輸出的結(jié)果就是視頻。我們點擊右邊的“Browse Models”按鈕瀏覽所有的模型。
在展開的模型列表中,最上面的zeroscope_v2_576w 下載量有28.5K,看來用的人很多,而且星星數(shù)量也不少。
點擊進(jìn)入模型詳情頁,里面對模型進(jìn)行了簡單描述,并且提供了模型的使用方式。由于所有Hugging face上面托管的模型都可以免費使用,所以我們直接按照使用方法調(diào)用就好了。 具體的調(diào)用方法會在后面的代碼描述中說明。
我看了看模型基本沒有問題,于是敲定就是它了。將文本轉(zhuǎn)化為視頻內(nèi)容的重任就交給它了。
輔助工具:Langchain, PyTorch, Diffusers
解決兩個大模型工具的問題之后,我們還需要一些幫手。
- Langchain:作為一個大模型的腳手架,Langchain的Prompt Template可以幫助我更有效地設(shè)置和優(yōu)化模型的輸入提示。
- PyTorch:作為一個強大的機(jī)器學(xué)習(xí)庫,PyTorch可以用于定制一些特定功能,讓我更靈活地使用前兩者。
- Diffusers庫:提供了諸如`DiffusionPipeline`和`DPMSolverMultistepScheduler`等工具,這些可以用于進(jìn)一步優(yōu)化視頻生成過程。
Langchain主要用于優(yōu)化大語言模型的輸入和輸出,PyTorch用于更高級的自定義和優(yōu)化,而Diffusers庫則可以用于進(jìn)一步提升視頻生成的質(zhì)量。
通過選擇工具和模型,我為自己構(gòu)建了工具箱。每一項選擇都是出于特定的考慮和需求,旨在解決我在創(chuàng)意視頻生成過程中可能遇到的問題。這樣,即使我不是一個“創(chuàng)意大師”,也有信心能制作出令人印象深刻的創(chuàng)意視頻。
小心嘗試:遇到的問題與調(diào)整
剛開始,我嘗試用一些簡單的關(guān)鍵字給到zeroscope_v2_576w模型,比如“小貓”,“科技感”,“奔跑”,來生成文本。然而,我很快發(fā)現(xiàn)這樣做產(chǎn)生的創(chuàng)意還是不夠豐富。語言的敏感性:英文輸入的效果更好。這和我之前預(yù)想的差不多,通過簡單的關(guān)鍵詞生成視頻可能還是不夠。
通過如下代碼,我搞定了創(chuàng)意文字的輸出。
from langchain.llms import OpenAI
from langchain import PromptTemplate
llm = OpenAI(model_name="gpt-3.5-turbo")
template = """
我想讓大模型根據(jù)文字生成創(chuàng)意視頻,我本身沒有什么思路, 會輸入幾個關(guān)鍵詞,你根據(jù)這幾個詞生成具有創(chuàng)意的一句話(英文),在15token以內(nèi)。
我把中文輸入放到這里:{input},將你生成的這句話直接輸出,由于我要用這句話直接生成視頻,所以在輸出的時候不要附加除了這句話之外的內(nèi)容。
"""
prompt = PromptTemplate(
#接受用戶輸入
input_variables=["input"],
#定義Prompt tempalte
template=template,
)
#這里是真正的用戶輸入
final_prompt = prompt.format(input='小貓 科技感 奔跑 ')
response = llm(final_prompt)
print (f"大語言模型的回應(yīng): {response}")
照例我們對代碼進(jìn)行簡單介紹:
這段代碼是用于生成創(chuàng)意視頻概念的文本,具體通過與OpenAI的GPT-3.5-turbo大模型交互來實現(xiàn)。下面是代碼各部分的解釋:
1. 導(dǎo)入必要的模塊:
- `from langchain.llms import OpenAI`: 導(dǎo)入Langchain庫中的OpenAI模塊,用于與GPT-3.5-turbo交互。
- `from langchain import PromptTemplate`: 導(dǎo)入Langchain的PromptTemplate類,用于構(gòu)建和格式化模型的輸入。
2. 初始化大模型:
- `llm = OpenAI(model_name="gpt-3.5-turbo")`: 初始化OpenAI的GPT-3.5-turbo模型。
3. 定義模板:
- `template = """..."""`: 定義一個字符串模板,用于生成與大模型交互的最終提示(prompt)。
4. 創(chuàng)建PromptTemplate對象:
- `prompt = PromptTemplate(...)`: 使用之前定義的字符串模板和輸入變量來創(chuàng)建PromptTemplate對象。
5. 生成最終的提示:
- `final_prompt = prompt.format(input='小貓 科技感 奔跑 ')`: 格式化PromptTemplate對象,插入真正的用戶輸入。
6. 與大模型交互:
- `response = llm(final_prompt)`: 使用格式化后的提示與GPT-3.5-turbo模型進(jìn)行交互,獲取模型的輸出。
7. 輸出模型的響應(yīng):
- `print (f"大語言模型的回應(yīng): {response}")`: 打印模型生成的創(chuàng)意文本。
大語言模型的回應(yīng): "Technology-driven feline streaks across in a futuristic blur."
大模型的回應(yīng)是上面這句英文,我反正沒有看出有什么創(chuàng)意,不過還是需要進(jìn)行測試的。
在輸入prompt的部分我糾結(jié)了很久,GPT的模型有時候會輸出一些不必要的“廢話”,最后我強制它只輸出創(chuàng)意句子才滿足了我的要求。因為這里的response需要傳給視頻生成的模型,所以無關(guān)的信息是越少越好。
接下來的代碼就是將response給我們的zeroscope_v2_576w 視頻模型了。
# 導(dǎo)入PyTorch庫,這是一個用于機(jī)器學(xué)習(xí)和深度學(xué)習(xí)的開源庫
import torch
# 從diffusers庫中導(dǎo)入DiffusionPipeline和DPMSolverMultistepScheduler類
# DiffusionPipeline用于處理擴(kuò)散流程,DPMSolverMultistepScheduler用于調(diào)度多步解算器
from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler
# 從diffusers.utils模塊中導(dǎo)入export_to_video函數(shù),用于導(dǎo)出生成的視頻幀
from diffusers.utils import export_to_video
# 使用from_pretrained方法從預(yù)訓(xùn)練模型"cerspense/zeroscope_v2_576w"中加載DiffusionPipeline
# 并設(shè)置數(shù)據(jù)類型為float16以減少內(nèi)存使用和提高計算速度
pipe = DiffusionPipeline.from_pretrained("cerspense/zeroscope_v2_576w", torch_dtype=torch.float16)
# 從當(dāng)前管道的調(diào)度器配置中創(chuàng)建一個新的多步解算器調(diào)度器(DPMSolverMultistepScheduler)
pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config)
# 啟用CPU離線模型加載,在有限的GPU內(nèi)存下運行更大的模型
pipe.enable_model_cpu_offload()
# 設(shè)置輸入提示
prompt = response
# 使用管道進(jìn)行推理,得到生成的視頻幀
# num_inference_steps設(shè)置為40,表示使用40步進(jìn)行推理。
# 擴(kuò)散模型需要通過擴(kuò)散:添加噪聲,收縮:去除噪聲,最終生成數(shù)據(jù)。
# height和width設(shè)置生成視頻的分辨率
# num_frames設(shè)置生成視頻的幀數(shù)
video_frames = pipe(prompt, num_inference_steps=40, height=320, width=576, num_frames=24).frames
# 使用export_to_video函數(shù)導(dǎo)出生成的視頻幀,保存為視頻文件
video_path = export_to_video(video_frames)
這段代碼主要用于將大模型生成的創(chuàng)意文本轉(zhuǎn)化為一段視頻。代碼涉及多個步驟和組件,下面是代碼部分的解釋:
導(dǎo)入必要庫和模塊
1.導(dǎo)入PyTorch庫:PyTorch是一個用于機(jī)器學(xué)習(xí)和深度學(xué)習(xí)的開源庫。
2.導(dǎo)入DiffusionPipeline和DPMSolverMultistepScheduler:這兩個類分別用于處理擴(kuò)散流程和調(diào)度多步解算器。
3.導(dǎo)入export_to_video函數(shù):這個函數(shù)用于將生成的視頻幀導(dǎo)出為一個視頻文件。
4.加載預(yù)訓(xùn)練的DiffusionPipeline:使用`from_pretrained`方法加載預(yù)訓(xùn)練模型"cerspense/zeroscope_v2_576w"。
5.設(shè)置調(diào)度器:從當(dāng)前管道的調(diào)度器配置中創(chuàng)建一個新的多步解算器調(diào)度器。
6.啟用CPU離線模型加載:這一步可在有限的GPU內(nèi)存下運行更大的模型。
7.設(shè)置輸入提示:用大模型生成的文本(存儲在變量`response`中)作為輸入。
8.進(jìn)行推理:使用DiffusionPipeline進(jìn)行推理,生成視頻幀。
- `num_inference_steps=40`:推理過程會經(jīng)歷40個步驟。
- `height=320, width=576`:設(shè)置生成視頻的分辨率。
- `num_frames=24`:設(shè)置生成視頻的幀數(shù)。
9.導(dǎo)出生成的視頻幀:使用`export_to_video`函數(shù)將生成的視頻幀保存為一個視頻文件。
整體邏輯是:先初始化所需的各個組件和庫,然后設(shè)置適當(dāng)?shù)膮?shù)和輸入提示,最后執(zhí)行推理和導(dǎo)出結(jié)果。
得到結(jié)果:終點也是新的起點
經(jīng)過上面的一番折騰,我將文件生成到了video_path 這個目錄中了。由于使用了co-lab的虛擬機(jī)實現(xiàn)了上面的代碼。
Google Colaboratory(簡稱Colab)是一個基于云端的Jupyter Notebook環(huán)境,用于編寫和執(zhí)行Python代碼。它為數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)、深度學(xué)習(xí)等領(lǐng)域的研究和教育提供了便利的平臺。以下是一些關(guān)鍵特點和優(yōu)勢:
主要特點:
1.免費使用:Colab是一個免費的服務(wù),你只需要有一個Google帳號即可使用。
2. 便捷的共享和協(xié)作:與Google Drive集成,方便文件的上傳、下載和共享。也可以多人實時編輯同一個Notebook。
3. GPU支持:Colab提供免費的GPU資源,這對于執(zhí)行復(fù)雜的機(jī)器學(xué)習(xí)或數(shù)據(jù)處理任務(wù)非常有用。
4. *簡單易用:無需配置,只需打開一個Web瀏覽器就可以編寫和執(zhí)行代碼,適合初學(xué)者和專家。
5. *豐富的庫支持*:預(yù)安裝了大量的Python庫,無需手動安裝就可以直接使用,如NumPy, Pandas, TensorFlow, PyTorch等。
我這里打印一下 video_path 所在的目錄。
print(video_path)
發(fā)現(xiàn)在tmp 目錄下,我下載視頻并且打開播放??纯催@貓叫一個抽象,是因為奔跑的原因嗎?前腿去哪里了?
是提示詞不精準(zhǔn)嗎?于是,我調(diào)整提示詞如下,讓gpt-3.5-turbo知道我是給視頻大模型提供生成句子的。
我想讓大模型根據(jù)文字生成創(chuàng)意視頻,生成視頻的模型我使用的是Hugging face上的zeroscope_v2_576w,我希望你給出的提示詞它能夠理解。
我本身沒有什么思路, 會輸入幾個關(guān)鍵詞,你根據(jù)這幾個詞生成具有創(chuàng)意的一句話(英文),在15token以內(nèi)。
我把中文輸入放到這里:{input},將你生成的這句話直接輸出,由于我要用這句話直接生成視頻,所以在輸出的時候不要附加除了這句話之外的內(nèi)容。
于是,我得到下面這段創(chuàng)意文字。
A futuristic, tech-savvy cat swiftly dashes through time.
希望,能夠得到好效果,于是我懷著忐忑的心情又生成了一次視頻。
這次看上去更像一只貓了,還有藍(lán)色的“圍脖”,這就是科技感嗎?
最終,我雖然生成了一個包含“小貓”、“科技感”和“奔跑”等元素的創(chuàng)意視頻,但還需要不斷的進(jìn)行調(diào)整才能達(dá)到我的預(yù)期。所以,這只是一個開始。未來,我還計劃進(jìn)一步優(yōu)化方法,并嘗試更多不同類型的創(chuàng)意內(nèi)容。
總結(jié)
通過整合不同的AI技術(shù)和工具,即便不是“創(chuàng)意大師”,我們也能生成富有創(chuàng)意和個性的視頻內(nèi)容。在實驗過程中,我們遇到了一些問題,例如語言敏感性和輸入效果,但通過不斷調(diào)整和優(yōu)化,最終實現(xiàn)了目標(biāo)。這不僅為那些在創(chuàng)意產(chǎn)業(yè)中想要做出一番貢獻(xiàn)但又缺乏信心的人提供了一條可能的路徑,也展示了AI在創(chuàng)意領(lǐng)域的巨大潛力。通過合理地組合和應(yīng)用這些先進(jìn)的技術(shù),我們完全有能力突破傳統(tǒng)的限制,創(chuàng)造出更加驚艷和個性化的作品。
作者介紹
崔皓,51CTO社區(qū)編輯,資深架構(gòu)師,擁有18年的軟件開發(fā)和架構(gòu)經(jīng)驗,10年分布式架構(gòu)經(jīng)驗。