點贊再看,養成習慣,微信公眾號搜索【JackCui-AI】關注這個愛發技術干貨的程序員。本文 GitHub https://github.com/Jack-Cherish/PythonPark 已收錄,有一線大廠面試完整考點、資料以及我的系列文章。
1 隱秘的角落
用了一個周末,一口氣刷完了《隱秘的角落》這部電視劇。
不得不說,這部網劇看得過癮,回想起來,也總覺得意猶未盡。
劇情開篇,景區的山頂,一個戴眼鏡的男人,借著拍照片,把一對老人推了下去。
這一幕,被在景區游玩的三個孩子意外拍攝下來,故事從此展開。
這部劇,讓一個叫「張東升」男人的名字大火,也就是把那對老人推下山的兇手。
而跟他本人同樣出名的場景,是他突然摘下假發后露出的發際線。
「張東升」禿頭造型,火爆網絡,他的經典語錄有:
- 一起去爬山嗎?
- 您看我還有機會嗎?
作為腦力勞動的程序員,脫發可能都是曾擔憂過的一個問題。
在「程序員界」,流傳著這么一個段子:
「我變禿了,也變強了?!?/p>
想不想,看看變強后的自己?
今天,繼續手把手教學。
算法原理、環境搭建、模型訓練、效果測試,一條龍服務,盡在下文!
2 算法原理
我在曾經的文章里講解過類似的算法原理,例如之講解的 ALAE 算法,人臉屬性編輯。
這個算法是發表在國外 Medium 網站上的一篇文章。
Medium 原文地址(需要翻墻):
https://medium.com/swlh/hairs...
這是一個名為 Azmarie Wang 的作品,作者是一位小姐姐。
而她也在自己的 Github 上開源了相應的代碼。
項目地址:
https://github.com/Azmarie/Ha...
但,這個篇文章傳到國內,源碼被別人做成了視頻在「 B站 」分享出去,就「莫名其妙」的變成了"自制"。
很多公眾號發文,都冠以「 B 站 Up 主自制」的標簽。
自制個錘子哦!
人家文章、源碼早就有了好嗎?
槽吐完了,咱接著說算法原理。
這個算法的名字叫「 Hairstyle Transfer 」。
該算法也是站在巨人的肩膀上實現的,由 StyleGAN Encoder、Progressive GAN、InterFace GAN、SVM 多種算法組成。
算法流程:
換一個通俗一點的語言解釋就是,先使用原圖生成一個「人臉模型 」,這個「人臉模型 」是可以編輯的,然后找到控制頭發的「控制器」,調整參數,改變發型。
專業一點的說法就是,先使用原圖,用 StyleGAN Encoder 反算潛碼( latent code ),獲得多維的特征向量(頭發、眼睛、嘴巴、膚色等)。
然后訓練 SVM 分類器,用于找到控制頭發的那個特征向量。
最后使用 Interface GAN 編輯特征,就可以完成頭發屬性編輯了。
想更深入的學習原理,需要先學習一下 StyleGAN Encoder 和 Interface GAN ,篇幅有限,本文就「點到為止」了。
3 環境搭建
你需要有在有 GPU 的機器上運行,如果能翻墻工具,強烈建議使用 Google Colab。
Google Colab 是一個 Google 提供的免費 GPU 服務器。
「 Hairstyle Transfer 」需要下載很多存放到 Google Drive 的權重文件。
使用 Google Colab 跑這個項目很方便,因為這個項目都是 ipynb 文件。
如果不能翻墻,也可以自己在本地,使用 Anaconda 新建虛擬環境。
「 Hairstyle Transfer 」算法,使用 Tensorflow 框架,并且必須是 1.x 的版本,不兼容 2.x。
首先,創建一個名為 tf 的 conda 虛擬環境。
conda create -n tf python=3 jupyter notebook
然后使用 conda 和 pip 按照如下順序,安裝如下第三方庫即可:
conda install scipy tensorflow-gpu==1.15
都安裝好后,環境就算搭建完成了。
4訓練 & 效果測試
我們以「張東升」的圖片為例進行訓練以及效果測試。
圖片下載地址:
https://cuijiahua.com/wp-cont.../_1.png
將項目下載到本地:
git clone https://github.com/Azmarie/Hairstyle-Transfer
然后你會得到三個 jupyter 的 ipynb 文件。
依照上述順序跑通代碼。
StyleGAN/_Encoder 會生成 output/_vectors.npy 文件。
Get/_attribute/_score/_pairs 會 stylegan-dlatents.npy 和 9/_score.npy 文件。
然后,Train/_Boundaries 使用 stylegan-dlatents.npy 和 9/_score.npy 訓練 Boundaries。
這里用到了 SVM 分類器,將控制頭發的特征向量分出來,得到 boundary.npy,用于后續發型的控制。
最后,再使用 output/_vectors.npy 和 boundary.npy,即可控制頭發的多少。
ipynb 詳細說明了代碼需要如何運行,依照它的教程,按照次序運行程序即可。
里面詳細說明了,怎么裁剪圖片,怎么訓練等。
代碼中用到了很多 Google Drive 保存的權重文件,我將這些權重文件,都上傳到了我的百度網盤。
下載鏈接(提取碼:2afm):
https://pan.baidu.com/s/1sPqg...
需要注意的是,下載好這些權重文件,在跑代碼的時候需要將代碼中所有的加載權重方式修改一下,都改為本地加載。
例如修改 pkl 的讀取方式等。
很簡單,這里就不一一說明了。
根據 ipynb 的說明,我們就可以順利跑通所有代碼。
完成模型訓練和效果測試。
最后,一起看一下「張東升」的 「 Hairstyle Transfer 」效果吧!
就很“禿然”,有木有!
用自己照片試試看?一秒變超人。
5 最后
「 Hairstyle Transfer 」 算法也有一些小問題,比如控制頭發變少,圖片的色調也會變暗。
作者:Jack Cui
原文:https://mp.weixin.qq.com/s/3r...
關注作者公眾號,獲取更多有趣AI應用~
系列篇
更多AIoT領域有趣的算法應用及產品請關注有趣的AIoT應用專欄。
審核編輯:符乾江
-
人工智能
+關注
關注
1796文章
47642瀏覽量
239809 -
代碼
+關注
關注
30文章
4823瀏覽量
68922
發布評論請先 登錄
相關推薦
評論