Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
rom:SenseTime 編譯:T.R
面部圖像操作是計算機視覺和計算機圖形學里十分重要的研究方向,包括自動表情生成和面部風格遷移方向都離不開它的身影,也成為了美妝app里重要的AI技術。面部操作主要分為語義和幾何兩個方向,但目前的方法大多局限于一系列預定義屬性的操作方法,限制了用戶隨心所欲變換人臉屬性的自由。
為了克服目前系統缺乏自由操作的缺陷,來自商湯、港中文和港大的研究人員們提出了一種支持用戶自由交互、多樣性操作的新方法MaskGAM,它利用人臉的語義掩膜作為人臉操作和人臉信息的有效中介,在mask空間中進行的操作代替了直接在像素空間中對圖像進行的操作,使得生成的結果具有更豐富的多樣性,也為用戶提供了更加直觀的方式來對面部的各個屬性進行修飾和編輯。
MaskGAN主要有兩方面的構成,一方面是負責學習從語義掩膜到輸出圖像間映射的稠密映射網絡(DenseMappingNetwork,DMN),另一部分是負責為用戶對源圖像掩膜進行建模的編輯行為模擬訓練部分(Editing Behavior Simulated Training)。
稠密映射網絡DMN 由一個生成器主干網絡和一個空間注意力風格編碼器構成。空間注意力編碼器利用圖像和對應的語義掩膜作為輸入,并將得到的空間注意力特征編碼送入圖像生成主干網絡,隨后圖像生成網絡基于空間注意力特征和語義掩膜編碼的特征生成對應的面部圖像。這一稠密映射網絡可以學習出用戶編輯掩膜與目標圖像間的細粒度風格映射。
DMN采用了Pix2PixHD 作為主干網絡,并增加了空間注意力編碼器來融合目標圖像與掩膜間信息。隨后生成器將這一部分的信息融合生成出逼真的真實圖像。
空間注意力特征編碼器和對應的空間特征轉換層SFT
在編碼器中,研究人員采用了空間特征轉移層來將學習出仿射變換參數,并給予參數來對特征圖進行逐通道和空間調制,最終得到包含空間注意力風格的仿射參數信息。隨后研究人員使用自適應實例歸一化來將得到的空間注意力信息轉移到主干網絡上。
最終生成器部分的解碼器在輸入掩膜以及掩膜與圖像構成的空間信息編碼下共同生成最終的圖像。空間注意力可以有效地將目標圖像的風格通過目標掩膜的信息傳遞給源圖掩膜與輸出間的映射關系。
值得注意的是,在訓練時使用的掩膜來自于目標圖像,而在實際時主干網絡的掩膜則是源圖像(或用戶編輯后的源圖掩膜)。
而編輯行為模擬訓練部分則用于為用戶的編輯行為建模,使得生成模型對于各式各樣的編輯具有更好的魯棒性。它主要由先前得到的稠密映射網絡DMN、預訓練的MaskVAE、以及alpha 通道的融合子網絡共同構成。
其中MaskVAE 由編碼器-解碼器構成,主要負責幾何結構先驗的流型建模;而alpha融合子網絡主要用于融合圖像來幫助網絡保持操作過程中的連續性。通過這些子模塊的聯合訓練將為生成模型在面對多樣性的用戶編輯、輸入時提供更好的魯棒性。
MaskVAE與自編碼器很類似,主要用于處理結構的先驗信息,其損失函數包括了重建語義掩膜的逐像素損失和在隱空間中控制語義標簽平滑的KL散度項。MaskVAE可以對語義標簽進行平滑的轉換,在隱空間中的線性插值結果如下圖所示。
整個變分自編碼器通過下面的結構來進行訓練,并最小化重建誤差。
訓練好的MaskVAE在整個方法流程中的主要目的是為輸入掩膜分別生成內插和外插新掩膜,為后續的融合提供條件。
AlphaBlender的主要作用是保證圖像操作的連續性,它可以維持融合結果與目標結果檢測連續性。研究人員通過深度學習AlphaBlender來學習出融合參數合成最終圖像。融合模型在訓練過程中與與兩個DMN進行聯合優化。這一部分的模型被定義為融合生成器GB。
模型的訓練過程一共分為兩個階段,分別是對于稠密映射網絡的預訓練和針對用戶編輯行為模擬的增強訓練以提高生成器魯棒性。
第一階段的訓練。首先需要利用基準圖像It 和對應的掩膜Mt 訓練稠密映射網絡,使得模型學會從掩膜到圖像的映射過程。隨后利用預訓練的映射模型DMN、MaskVAE,以及聯合訓練和AlphaBlender來實現。
第二階段的訓練。一張輸入的掩膜通過MaskVAE (在隱空間中)經過內插和外插得到了兩張不同的掩膜,而后與對應的GT圖像與掩膜分別送入到兩個稠密映射網絡中生成出外插圖像和內插圖像;將兩幅圖像再輸入到Blender模型中學習出融合參數的權重圖,將圖像進行最后的融合生成結果。在第二階段的訓練中,MaskVAE 的參數固定,而兩個DMN 生成器和Blender 權重網絡進行聯合優化。
最終整個模型將通過多目標學習來進行聯合優化,其目標函數包含了生成器的對抗損失、特征匹配損失和感知損失等,聯合優化損失函數如下圖所示。
CelebAMask-HQ
為了為人臉語義分割和屬性操作打下更好的研究基礎,研究人員在CelebA-HQ的基礎上構建了包含30000張高分辨率512x512的人臉圖片,包含了面部19類詳細的信息標注。針對被部分遮擋的面部區域,標注員還進行了推斷補全了語義標簽。與先前的Helen 數據集相比,圖像的數量擴大十多倍,同時標簽的數量了也增加了近兩倍。
最后研究人員從語義、幾何、分布以及人類感知等方面對比了MaskGAN 和先前的算法,顯示了在人臉屬性遷移和風格復制任務上的性能差異。下面這張圖顯示了MaskGAN對于人臉特定屬性(如笑容)的遷移能力,在視覺感知和幾何層面都很強。
MaskGAN對于風格復制也可以很好勝任,相比于先前的方法它可以對于性別和妝容有更強的遷移能力。
此外還可以通過修改圖像的語義掩膜來為圖中的人物添加配飾、眼鏡,改變發型、臉型和各種面部屬性。
消融性分析顯示,對于稠密映射網絡,空間注意力風格編碼器可以通過先驗信息保持模型不受用于對mask修改的過度影響,同時也提高了從目標圖像風格遷移的準確性。
而對于編輯行為模擬訓練來說,有效地改善了模型對于人臉屬性保持的魯棒性,使得人類感知得分得到了大幅提升。下表中帶十字的結果為增加了編輯行為模擬訓練的增強結果。
在作者的demo演示中可以看到,隨意修改語義mask就可以改變生成圖像的臉型、發型、面部各個部分的屬性,還能添加耳環、改變眼睛,生成結果十分自然。
作者表示不久將放出人臉屬性操作的源碼,稍作等待就將在github上發布:
https://github.com
寫CSS的常用套路(下篇)...
點擊觀看——我寫CSS的常用套路(上篇)...
為盒子添加陰影,增加盒子的立體感,可以多層疊加,并且會使陰影更加絲滑
本demo地址:Pagination
注意到box-shadow還有個inset,用于盒子內部發光
利用這個特性我們可以在盒子內部的某個范圍內設定顏色,做出一個新月形
再加點動畫和濾鏡效果,“猩紅之月”閃亮登場!
注意到它散發著淡淡的紅光,其實就是2個偽元素應用了模糊濾鏡所產生的效果
本demo地址:Crimson Crescent Loading
文本陰影,本質上和box-shadow相同,只不過是相對于文本而言,常用于文本發光,也可通過多層疊加來制作霓虹文本和偽3D文本等效果
本demo地址:Staggered GlowIn Text
本demo地址:Neon Text
本demo地址:Staggered Bouncing 3D Loading
能將背景裁剪成文字的前景色,常用來和color: transparent配合生成漸變文本
本demo地址:Menu Hover Fill Text
漸變可以作為背景圖片的一種,具有很強的色彩效果,甚至可以用來模擬光
線性漸變是筆者最常用的漸變
這個作品用到了HTML的dialog標簽,線性漸變背景,動畫以及overflow障眼法,細心的你看出來了嗎:)
本demo地址:Confirm Modal
徑向漸變常用于生成圓形背景,上面例子中Snow的背景就是一個橢圓形的徑向漸變
此外,由于背景可以疊加,我們可以疊加多個不同位置大小的徑向漸變來生成圓點群,再加上動畫就產生了一種微粒效果,無需多余的div元素
本demo地址:Particle Button
圓錐漸變可以用于制作餅圖
用一個偽元素疊在餅圖上面,并將content設為某個值(這個值通過CSS變量計算出來),就能制作出度量計的效果,障眼法又一次完成了它的使命
本demo地址:Gauge (No SVG)
PS里的濾鏡,blur最常用
當blur濾鏡和contrast濾鏡一起使用時,會產生一種融合(gooey)的奇特效果
本demo地址:Snow Scratch
對背景應用濾鏡,產生毛玻璃的效果
本demo地址:Frosted Glass
PS里的混合模式,常用于文本在背景下的特殊效果
以下利用濾色模式(screen)實現文本視頻蒙版效果
本demo地址:Video Mask Text
PS里的裁切,可以制作各種不規則形狀。如果和動畫結合也會相當有意思
本demo地址:Name Card Hover Expand
由于clip-path有裁切功能,因此可以將多個文字疊在一起,并按比例裁切成多分,再應用交錯動畫,就能制作出酷炫的故障效果(glitch)。
本demo地址:Cross Bar Glitch Text
PS里的遮罩。所謂遮罩,就是原始圖片只顯示遮罩圖片非透明的部分
雖然clip-path能裁切出形狀,但它無法鏤空,因為形狀的里面它管不著
可能有人(包括我)會用偽元素來“模擬”鏤空(通過設置同樣的背景色),但這樣并非真的鏤空,換了個背景或浮在圖片上就會暴露出來,這時我們就要求助于遮罩了
假設,你想制作一個空心的圓環,那么你只需將一個徑向漸變作為元素的遮罩,并且第一個color-stop設置為透明,其他的color-stop設置為其他顏色即可,因為遮罩的定義就是只顯示遮罩圖片非透明的部分
注意:為了消除鋸齒,這個徑向漸變的中間需要有一個額外的color-stop用于緩沖,長度設置為原長度加0.5px即可
本demo地址:Circle Arrow Nav
投影效果,不怎么常用,適合立體感強的作品
本demo地址:Card Flip Reflection
雖然這并不是一個CSS特性,但是它經常用于完成那些CSS所做不到的事情
那么何時用它呢?當CSS動畫中有屬性無法從CSS中獲取時,自然就會使用到它了
目前CSS還尚未有獲取鼠標位置的API,因此考慮用JS來進行
通過查閱相關的DOM API,發現在監聽鼠標事件的API中,可通過e.clientX和e.clientY來獲得鼠標當前的位置
既然能夠獲取鼠標的位置,那么跟蹤鼠標的位置也就不是什么難事了:通過監聽mouseenter和mouseleave事件,來獲取鼠標出入一個元素時的位置,并用此坐標來當作鼠標的位移距離,監聽mousemove事件,來獲取鼠標在元素上移動時的位置,同樣地用此坐標來當作鼠標的位移距離,這樣一個跟蹤鼠標的效果就實現了
本demo地址:Menu Hover Image
CSS Houdini是CSS的底層API,它使我們能夠通過這套接口來擴展CSS的功能
目前來說,我們無法直接給漸變添加動畫,因為瀏覽器不理解要改變的值是什么類型
這時,我們就可以利用CSS.registerProperty()來注冊我們的自定義變量,并聲明其語法類型(syntax)為顏色類型<color>,這樣瀏覽器就能理解并對顏色應用插值方法來進行動畫
還記得上文提到的圓錐漸變conic-gradient()嗎?既然它可以用來制作餅圖,那么我們能不能讓餅圖動起來呢?答案是肯定的,定義三個變量:--color1、--color2和--pos,其中--pos的語法類型為長度百分比<length-percentage>,將其從0變為100%,餅圖就會順時針旋轉出現
利用絕對定位和層疊上下文,我們可以疊加多個從小到大的餅圖,再給它們設置不同的顏色,應用交錯動畫,就有了下面這個炫麗的效果
本demo地址:Mawaru
將交錯動畫和偽類偽元素結合起來寫出來的慎重勇者風格的菜單
本demo地址:Shinchou Menu
者:明明
轉發鏈接:https://mp.weixin.qq.com/s/BehjH5xVXFWohQXFl3u-kQ
*請認真填寫需求信息,我們會在24小時內與您取得聯系。