用Python生成會跳舞的美女
導語
表妹心疼我,為了逗我開心,教我用Python制作會跳舞的美女。作為新時代的活雷鋒,在這里分享給大家。
開發(fā)工具
Python版本:3.6.4
相關(guān)模塊:
torch0.4.1模塊;
torchvision0.2.2模塊;
opencv-python模塊;
argparse模塊;
numpy模塊;
以及一些Python自帶的模塊。
環(huán)境搭建
安裝Python并添加到環(huán)境變量,pip安裝需要的相關(guān)模塊即可。
(PS:CUDA環(huán)境配置請自行Google教程。)
原理簡介
這里我們利用VAE的原理來生成會跳舞的小姐姐唄。先簡單介紹一下理論知識,要說VAE,就得先談?wù)勛詣泳幋a器,自動編碼器最開始用于數(shù)據(jù)壓縮,其原理圖十分簡單直觀:
在模型訓練時,輸入圖片首先通過一個編碼器(現(xiàn)在當然是神經(jīng)網(wǎng)絡(luò)啦)將輸入數(shù)據(jù)降維到一個code,接著將code輸入到解碼器(當然還是神經(jīng)網(wǎng)絡(luò)啦)生成一個與輸入相同大小的圖片,網(wǎng)絡(luò)的優(yōu)化目標就是使得輸入編碼器的圖片與解碼器輸出的圖片盡可能相似。 當模型訓練完之后,我們就可以拿出這個解碼器,隨機傳入一些code作為它的輸入,來生成一些差不多的圖片。但是這種做法存在一個問題,就是編碼器生成的code包含了原圖信息,因此,我們就無法自己構(gòu)造一些隨機的code來作為解碼器輸入從而生成任意圖片(必須是現(xiàn)有圖片過了編碼器之后生成的code作為輸入)。為了解決這個問題,VAE就誕生啦~VAE的全稱是:
Variational Autoencoder 即變分自編碼器
說起來,它的原理圖也十分簡單:
與自編碼器唯一不同就是在訓練過程中對code也進行了約束,使得code滿足某種分布(譬如正態(tài)分布)。這樣的話,模型訓練完之后,我們只需要隨機生成一個滿足該分布的code,就可以拿來作為解碼器的輸入,從而生成任意圖片啦~ 一般地,我們用均方損失函數(shù)保證原圖和生成圖相似,用KL損失函數(shù)來保證code滿足我們所要求的分布。均方損失大家肯定知道,KL散度的定義這里我也不想過多地去介紹,貼下維基百科上定義的公式吧:
P和Q是在同一個概率空間上定義的離散概率分布。 同時,為了方便計算KL散度,VAE引入了一個trick,叫:
reparameterization
以正態(tài)分布為例子,就是現(xiàn)在不直接預測code了,而是預測code的均值和方差,有了均值向量和方差向量,恢復code是很方便的(用標準正態(tài)分布乘以方差再加個均值就行了)。
再回過頭來,我們現(xiàn)在要用VAE來生成會跳舞的小姐姐,無非就是先找到一個訓練數(shù)據(jù)集,這里我找了個Youtube上的視頻作為數(shù)據(jù)集:
https://www.youtube.com/watch?v=NdSqAAT28v0
然后根據(jù)VAE的原理構(gòu)造一個編碼和解碼網(wǎng)絡(luò),用兩個損失函數(shù)作為約束訓練網(wǎng)絡(luò)就行啦。代碼就不一個個貼了,寫起來很簡單的,貼上來倒感覺有點麻煩,有需要的直接在公眾號后臺回復“dancenet”即可獲取。簡單說下代碼使用方式吧,模型訓練運行train.py文件即可,命令格式為:
python train.py --videopath xxx.mp4
模型測試運行demo.py文件即可,命令格式為:
python demo.py --mode random/fromtrain --checkpointspath xxx.pth --outputpath xxx.avi
這里模式的含義是code隨機生成/從訓練集中提取一些圖片的code作為輸入。
效果展示
隨機生成code模式作為輸入:
數(shù)據(jù)集中挑選圖片過編碼器獲得code作為輸入:
好了,我的分享到此結(jié)束了。
總結(jié)
到此這篇關(guān)于用Python生成會跳舞的美女的文章就介紹到這了,更多相關(guān)Python美女內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
批量將ppt轉(zhuǎn)換為pdf的Python代碼 只要27行!
這篇文章主要為大家詳細介紹了批量將ppt轉(zhuǎn)換為pdf的Python代碼,只要27行,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-02-02pandas DataFrame 數(shù)據(jù)選取,修改,切片的實現(xiàn)
這篇文章主要介紹了pandas DataFrame 數(shù)據(jù)選取,修改,切片的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-04-04python文件操作的基礎(chǔ)詳細講解(write、read、readlines、readline)
使用python來讀寫文件是非常簡單的操作,下面這篇文章主要給大家介紹了關(guān)于python文件操作的基礎(chǔ)詳細資料,包括write、read、readlines、readline等相關(guān)操作,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2022-04-04