張東升,我知道是你!如何使用GAN做一個禿頭生產器

2021-02-14 OSC開源社區
最近一部電視劇《隱秘的角落》在網上引起了眾多討論,要說這是2020年全網熱度最高的電視劇也不為過。而劇中反派Boss張東升也是網友討論的話題之一,特別是他的禿頭特點,已經成為一個梗了。

看過這部劇後,我突然很想知道自己禿頭是什麼樣子,於是查了一下飛槳官網,果然它有圖片生成的模型庫。那麼,我們如何使用PaddlePaddle做出一個禿頭生成器呢。

說到圖像生成,就必須說到GAN,它是一種非監督學習的方式,通過讓兩個神經網絡相互博弈的方法進行學習,該方法由lan Goodfellow等人在2014年提出。生成對抗網絡由一個生成網絡和一個判別網絡組成,生成網絡從潛在的空間(latent space)中隨機採樣作為輸入,其輸出結果需要儘量模仿訓練集中的真實樣本。判別網絡的輸入為真實樣本或生成網絡的輸出,其目的是將生成網絡的輸出從真實樣本中儘可能的分辨出來。而生成網絡則儘可能的欺騙判別網絡,兩個網絡相互對抗,不斷調整參數。生成對抗網絡常用於生成以假亂真的圖片。此外,該方法還被用於生成影片,三維物體模型等。普通的GAN模型對每一對圖像風格域都需要獨立地建立一個模型,相比之下,StarGAN就是個多面手了,即單個 StarGAN 模型就可以實現多個不同風格域的轉換,它允許在一個網絡中同時使用不同風格域的多個數據集進行訓練。這導致 StarGAN 的轉化圖像質量優於現有模型,並且可以靈活地轉換輸入圖像到任何想要的風格領域。(a)為處理多個域,應該在每一對域都建立跨域模型。(b)StarGAN用單個generator學習多域之間的映射。該圖表示連接多個域的拓撲圖。AttGAN利用分類損失和重構損失來保證改變特定的屬性AttGAN算法是基於encoder-decoder結構的,根據所需屬性對給定人臉的潛在表徵進行解碼,實現人臉屬性的編輯。現有些方法試圖建立一個獨立於屬性的潛在表示,來編輯屬性。然而,這種對潛在表徵的屬性無關約束過多,限制了潛在表徵的能力,可能導致信息丟失,從而導致生成過於平滑和扭曲。AttGAN沒有對潛在表示施加約束,而是對生成的圖像應用屬性分類約束(attribute classification constraint),以保證所需屬性的正確改變,即「改變你想要的」。同時,引入重構損失來保證只改變特定的屬性。還可以直接應用於屬性強度控制,並且可以自然地擴展到屬性樣式操作。STGAN只輸入有變化的標籤,引入GRU結構,更好的選擇變化的屬性STGAN是在AttGAN的基礎上做的改進。STGAN中生成網絡在編碼器和解碼器之間加入Selective Transfer Units(STU),同時引入屬性差異向量(只輸入需要改變的屬性),這樣一來,網絡變得更容易訓練,相比於目標屬性標籤,屬性差異標籤可以提供更多有價值的信息,使屬性生成精度明顯提升。STGAN差不多是AttGAN的升級版,Paddle的StarGAN不包含禿頭屬性,所以我們使用STGAN。STGAN效果預覽如下所示:上圖中每個頭像圖片對應的屬性分別為:original image、Bald、Bangs、Black Hair、Blond Hair、Brown Hair、Bushy Eyebrows、Eyeglasses、Male、Mouth Slightly Open、Mustache、No Beard、Pale Skin、Young。我們看到了什麼?Bald!對,這正是我們想要的禿頭屬性!AI Studio是百度飛槳提供的免費雲算力平臺,具有免費的GPU算力,notebook的UI風格,預裝的PaddlePaddle,非常適合我這樣的新手煉丹師去隨意搗鼓。下面我們在AI Studio上來開啟 「禿頭」之旅吧……1. 準備數據集本項目採用CelebA數據集,CelebA是CelebFaces Attribute的縮寫,意即名人人臉屬性數據集,其包含10177個名人身份的202599張人臉圖片。關於CelebA數據集的具體介紹,請詳見https://zhuanlan.zhihu.com/p/35975956。

# 解壓數據集
unzip data/data21325/imgAlignCeleba.zip -d dataset/
cp data/data21325/*.txt -d dataset/

2. 獲取模型

# 獲取GAN模型
# paddlepaddle/models的倉庫裡含有其支持的所有gan模型
!git clone https://gitee.com/paddlepaddle/models.git -b release/1.8
!cp -r models/PaddleCV/gan/* ./work/

3. 開始訓練

# 訓練
%cd ~/dataset
!python ../work/train.py --model_net STGAN \   # 指定stgan模型網絡
--data_dir ../dataset \                            # 數據集目錄
--dataset . \                                        # 數據集相對位置
--crop_size 170 \                                    
--image_size 128 \
--train_list ../dataset/attr_celeba.txt \        # 訓練集位置
--gan_mode wgan  \
--batch_size 32 --print_freq 1 \
--num_discriminator_time 5 \
--epoch 50 \
--dis_norm instance_norm \
--output ~/output/stgan/


4. 開始推理別著急!在「禿頭」之前,我們需要先準備要輸入的圖片,我把他放在my_dataset裡,修改dataset/test1.txt,把圖片填進去,並且根據圖片的特徵輸入特徵 :

%cd ~
# 輸入的參數可以看看infer_bald.py開頭的解釋哦,主要需要注意的是
# n_samples:它的個數決定了輸出的結果圖中含有幾張圖的結果,我設置為1,那麼就會只有一張圖的屬性變換輸出。
# crop_size、image_size最好不要修改,經過我測試會影響效果,因此最好把圖片控制在178的寬度
!python ./work/infer_bald.py \
--model_net STGAN \
--init_model ./33/ \
--dataset_dir my_dataset \
--test_list dataset/test1.txt \
--use_gru True \
--output ./infer_result/stgan/ \
--n_samples 1 \
--selected_attrs "Bald,Bangs,Black_Hair,Blond_Hair,Brown_Hair,Bushy_Eyebrows,Eyeglasses,Male,Mouth_Slightly_Open,Mustache,No_Beard,Pale_Skin,Young" \
--c_dim 13 \
--crop_size 178 \
--image_size 128 \
--load_height 128 \
--load_width 128 \
--crop_height 128 \
--crop_width 128 \

5. 禿頭效果展示因為stgan只用輸入變化的屬性,原infer會循環變化每個一個風格屬性(Bald,Bangs等),我把切換風格屬性的循環,修改成了只輸入禿頭屬性,然後循環逐漸改變變化程度,使其結果產生漸變效果這裡我發現男性中頭髮是短髮的禿頭化效果,明顯比長發男性好,頭髮蓬鬆就會影響禿頭效果,因為蓬鬆的頭髮遮蓋了腦袋的形狀,也有可能是訓練集缺少這類男性圖片的原因。第一張圖是最自然的,看起來也最真,應該是寸頭短髮的因素。輸入圖片的大小接近128x128,或者178x178,效果會比較好,原因可能是訓練集的大小都是128x128。官方這裡也說明:(http://https//www.paddlepaddle.org.cn/hubdetail?name=stgan_celeba&en_category=GANs)待處理圖片儘量只露臉,當五官是朝向正前方且露出五官時,效果會比較好。待處理圖片的尺寸接近 128 * 128 像素時,效果會比較好。如果覺得上面的比較繁瑣,infer裡的代碼複雜,那麼有一條直接的捷徑。Paddlehub裡面已經有STGAN的預訓練模型可以直接使用預訓練模型。

# 安裝Paddlehub和stgan_celeba預訓練模型
!pip install paddlehub==1.6.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
!hub install stgan_celeba

import paddlehub as hub

stgan = hub.Module(name="stgan_celeba")

test_img_path = ["my_dataset/img_align_celeba/000003.jpg"]
# org_info是一個只有一個元素的列表 如:["Bald,Bangs"]
# org_info要儘可能詳細的說明輸入圖片的特徵情況,否則會影響輸出效果:
# 必須填寫性別( "Male" 或 "Female")可選值"Bald", "Bangs", "Black_Hair", #"Blond_Hair", "Brown_Hair", "Bushy_Eyebrows", "Eyeglasses", #"Mouth_Slightly_Open", "Mustache", "No_Beard", "Pale_Skin", "Aged"
org_info = ["Male"]
# 指定要變化的特徵:禿頭
trans_attr = ["Bald"]

# set input dict
input_dict = {"image": test_img_path, "style": trans_attr, "info": org_info}

# execute predict and print the result
results = stgan.generate(data=input_dict)
print(results)

可以看出預訓練模型的禿頭程度比較固定,而我把禿頭程度設置的比較小,看起來可能更逼真一點。最後感謝飛槳平臺,讓我這個初學者就能做一些有趣的試驗。
還有我對stylegan挺感興趣的,希望之後可以支持到哈。如果您想詳細了解更多飛槳的相關內容,請參閱以下文檔。https://github.com/PaddlePaddle/models/tree/release/1.8/PaddleCV/ganhttps://gitee.com/paddlepaddle/models/tree/develop/PaddleCV/ganhttps://www.paddlepaddle.org.cnhttps://github.com/PaddlePaddle/Paddlehttps://gitee.com/paddlepaddle/Paddle

                       

覺得不錯,請點個在看呀!

相關焦點

  • 谷歌Up主自製禿頭生成器張東升躺槍,而這款生發GAN讓你髮際線前進一公裡!
    現在網絡上的p圖軟體往惡搞的路上走的越來越遠...想必最近看過《隱秘的角落》的小夥伴們對「張東升」這個人再熟悉不過了。而他洗完澡戴假髮的樣子成為了不少觀眾的心理陰影。你是否想像過自己禿頭是什麼樣子嗎?這不,最近一位Up博主為大家推出了一款自製禿頭生成器,來感受一下這禿頭的效果。禿的有點突然... 這髮際線後移的速度太過令人恐怖。
  • 張東升的禿頭讓我「感同身受」
    別說,這部劇確實上頭,就是背景音樂簡直是「陰樂」,嚇到我好幾次。但要說嚇到我最厲害的,除了開頭張東升親手把自己的嶽父嶽母推下山的那一幕之外,就數他洗澡時的那個禿頭了......說真的我當時差點嚇得哆嗦掉手裡的零食。而接下來張東升戴上假髮的那一幕讓我深深的感受到,髮際線真的太影響一個人的顏值了。感覺瞬間就從一個醜陋、可怕又猥瑣的禿頭男變成了一個只是看起來有點陰鬱的男人。
  • B 站 Up 主自製禿頭生成器,圓你禿頭夢想可好?
    看了這部片子,全國觀眾除了被男主張東升提醒爬山有風險之外,片中的另一個場景也頗讓人印象深刻,容易讓人產生共鳴,那就是張東升看到自己二十年後的樣子。這華麗麗的地中海造型,感覺秦昊老師帥氣的臉吼起來也有點吃力了.作為一名腦力勞動者,張東升年紀輕輕就禿了頭。
  • 《隱秘的角落》禿頭擔當,冷血無情的張東升,伊能靜會不會害怕?
    如果你沒看,都難以和同學們說上話!《隱秘的角落》的故事講述了三個小孩偶然發現有人殺人,隨後與兇手一同亂入各自家庭矛盾的無盡漩渦之中,大家都為自身欲望捨棄了天真與善良。《隱秘的角落》也是改編自紫金城的原創小說《壞小孩》,裡面以小孩的視角說明了一大部分大人的問題,沒有單純的惡,也沒有單純的善。回到劇中也是圍繞著你是否相信童話,你是否能相信孩子們展開。
  • 張東升禿頂造型深入人心,秦昊曬禿頭內幕,真是笑壞網友
    最近,電視劇《隱秘的角落》掀起了一波追劇狂潮,不同於其他的偶像劇,這部劇探討了一個很有深度的話題,它關乎家庭與成長,劇中疑點重重,一個又一個劇情扣人心弦,讓人看得停不下來。而張東升的禿頂形象也是給人留下了深刻的記憶,不知道大家好不好奇他的禿頭造型是如何打造的呢?
  • 《隱秘的角落》張東升為何是禿頭形象?細看人物設定
    假髮那為什麼這張東升是個禿頭呢?張東升的事業也並不順利,來到外地八年還只是一個小小的校工,被周圍人譏笑。酒局上的他慶祝對方喜添香火時,還得靠桌底下老婆塞的紅包。張東升認為只要嶽父嶽母死了,妻子徐靜就剩下她一個親人,他們就可以好好相愛了。於是,徐靜父母被一個惡魔殘忍推下了山崖,雙雙斃命。
  • B站Up主自製禿頭生成器,一鍵get張東升同款髮型,網友:禿的太過真實
    兩邊蜘蛛網,中間溜冰場,作為一名數學老師,張東升年級輕輕已經禿成這樣。網友們的評論更是扎心:仿佛看到了我的未來。如果你也有脫髮焦慮,想看看二十年後的自己,不妨來如法炮製一下。接下來我們來詳細說說禿頂生成器是如何實現的。B站視頻中,MarsLUL沒有詳細呈現代碼的實現過程,但所用到的核心技術和詳細參考資料均已給出。
  • 《隱秘的角落》張東升:一個得不到就毀滅可怕又可恨的「戀愛腦」
    一生只愛一個人,為一人著迷,她不是那種純粹為生存而活著的人,她的人生價值就在於一個「真」字和一個「痴」字。她愛上了陸展元,可陸展元卻負了她,從那之後,她的性情也大變。李莫愁就是個情痴,她的愛是佔有,容不得背叛。我愛你,為你付出了全部,你怎能負我?你若負我,得不到你,我也要徹底毀了你。
  • 《隱秘的角落》張東升殺妻弒母的背後,或許他需要一個伊能靜
    其實張東升禿頭這個裝扮可有可無,只要演員按照這個劇本演就好了,有沒有禿頭都能把這部劇的故事性展現出來,但加上禿頭這個裝扮就屬於錦上添花加了禿頭這個情節,張東升這個人物立馬就生動了,也更加凸顯了他的陰暗性。
  • 《隱秘的角落》,禿頂的張東升讓人細思極恐
    珂珂今天要說的,是秦昊飾演的張東升,在劇集裡特意加上的「禿頂」形象。電視劇在開機前,導演辛爽就曾和秦昊針對過劇中張東升的形象問題,有過一段閒聊,據導演辛爽介紹:「開機前我們需要探討故事、劇情,人物的發展和表達,同時會做一個角色的社會屬性和私人屬性。(秦)昊哥是完全可以做到的,他可以用表演去完成。」「但昊哥當時說,如果能給我一個支點,我可能會有更多可發揮的東西。」最後辛爽和秦昊聊到了禿頭。「我說禿頭怎麼樣?昊哥當時就特別興奮,倍兒激動。
  • 愛爬山的張東升劇中竟埋下了和幹細胞因子間的細節,你發現了嗎?
    儘管網上有人在可惜不能還原小說,但實際劇情和演技到底如何我們早已心中有數。而今天,小編則想來跟大家聊聊這部劇的反派主人公--張東升。 劇集開頭就交代了張東升行兇的過程--登山過程中以拍照為由將嶽父嶽母推下山崖。開篇即高能,勾起網友無限興趣:到底他為什麼這麼做呢?
  • 《隱秘的角落》裡張東升式「禿頭殺」,你怕了嗎?
    比起「一起去爬山」的梗,很多人可能對張東升那一頭「地中海」式禿頭更是印象深刻:怎麼年紀輕輕,就禿頂了呢? 小編看網上也有熱議說從張東升頭禿可以看出他性功能不行,古語有云,腎者,其華在發,其主在骨……頭禿就說明腎虛。
  • 不給你機會!景區掛「張東升禁止入內」警示牌,網友:秦昊可以麼
    他的一觸即發是早已預料的,看待一個心理扭曲人的心態就是:你不愛我了,我就把你毀掉。然而當你邁出了第一步就會有第二步第三步,就像說謊一樣,你需要用無數個謊言來圓最初的謊,所以才有了後面張東升的連環殺人案。
  • 徐靜離婚是否和張東升禿頂有關?男方上課的細節暴露了隱情
    言外之意就是,既然我跟你過得不幸福,那麼我想要離婚,爸媽也沒意見。8年前,張東升為了和徐靜在一起,背井離鄉來到寧州這個城市,最終作為上門女婿入贅徐家。一個極溫柔的男人,連我看著都覺得感動。這樣的好男人,為什麼還要離婚?有人說,那是因為徐家覺得張東升沒本事,看不起他。徐家嫌棄張東升沒本事是事實,但肯定不是徐靜鬧離婚的主要原因,因為徐家一開始就知道張東升就是窮小子一個。
  • 假如張東升問出「我還有機會嗎」,我該如何通過溝通策略保命
    劇情跌宕起伏,層層緊扣,非常好看,但是在看劇的同時,「我還有機會嗎」這句經典臺詞也變成了大家最愛玩的梗之一,也做成個各種表情包。我在玩梗的同時,也思考了一個問題。假如張東升問我「您看我還有機會嗎」,我該如何回答才能保命。這讓我想起了管理溝通中的一些策略。
  • 《隱秘的角落》張東升,隱忍的好人,幸福的壞人,到底要做哪一個
    說秦昊是影帝,我是真不知道,熟悉他就是從他跟伊能靜的婚姻開始,總是上熱搜。如今這部開播就9.2評分的《隱秘的角落》,是我看的秦昊的第一部戲,看第一集就欲罷不能。作為同事,跟別的老師相處融洽,剛到辦公室,老師們有聚餐,就問他去不去,張東升笑容可掬的說:我就不去了,我愛人在家呢
  • 秦昊統一回復:真的是倒模,我沒禿!網友:你老婆是你最大黑粉!
    秦昊統一回覆:真的是倒模,我沒禿!網友:你老婆是你最大黑粉!6月22日,伊能靜在線cue自己老公秦昊:「真沒想到有一天你能成為『翻江倒海的姐夫』,還是禿頭…」隨後就秦昊到底是不是禿頭,網友們展開了熱議,因為秦昊在《隱秘的角落》中扮演的張東升就是一個戴著假髮的謝頂中年男士,所以在看到了劇中超級逼真的謝頂髮型後,很多人都覺得秦昊很可能是真的禿頭了,對於網友們的質疑,秦昊選擇了發聲解釋來守護自己的男性尊嚴
  • 秦昊變「禿頭變態大叔」,脫髮群體越來越年輕化。
    演員陣容那是相當的龐大,這一群影帝,老戲骨的演技派,每一個表情都耐人尋味。 劇情主線路之一張東升是一名少年宮的數學老師,在一個陽光明媚的一天帶著自己的嶽父嶽母去六峰山景區爬山。等他們氣喘籲籲的爬到山頂時,張東升提出要給二老拍美美的照片,找角度,找光線,擺姿勢,簡簡單單的一張遊客照怎麼也拍不好。
  • 秦昊和張東升:錯過了一個經典大反派,又該怪誰呢?
    他前一秒還是孝子賢孫,下一秒就能送你「下山」。前一秒還在極力婉留你,下一秒已經送了你一顆通往地獄的藥。再加上秦昊的表演、以及導演在氣氛畫面上的渲染,張東升的壞妥妥地驚呆了全國人民。但是夠壞就一定能成為經典的大反派嗎?那可不一定,誰家裡沒有一個大反派?抗日劇中總有一個氣極敗壞的日本鬼子,喊著「八格丫擼」,拿著武士刀要砍光所有中國人。
  • 「隱秘的角落」張東升,這個為愛付出一切的男人,我真的恨不起來
    「隱秘的角落」已經播出完畢,留給我們的除了一個個讚揚聲,應該還有更多的思考。這部堪比美劇的中國電視劇中,有一個看起來讓人非常恐怖的人,他的眼神、他的哭泣、他的平靜、他的禿頭,都給我留下了很深的印象。單位同事說,因為看了張東升的表演,做了幾天噩夢。