華為云算法零門檻:零基礎(chǔ)教你AI試伊妝

雖然本文沒有趕在七夕前讓讀者見到哑了,但好飯不怕晚赘方,學(xué)會(huì)這個(gè),可以每天幫你的TA修圖弱左,當(dāng)然也可以給自己使用窄陡,而且強(qiáng)大易上手,毫無痕跡拆火,即開即用跳夭,無需下載App無需高級(jí)會(huì)員,貼合自己的五官们镜,很好的角度貼合币叹,學(xué)會(huì)后還可以嘗試基于此項(xiàng)目,進(jìn)行二次開發(fā)模狭,例如:Web颈抚,小程序,App等

本文亮點(diǎn):
1嚼鹉、論文解讀:帶你了解妝容遷移論文創(chuàng)新點(diǎn)贩汉、模型結(jié)構(gòu)和模型訓(xùn)練方法
2驱富、代碼解讀:拆解妝容遷移代云上、AI開發(fā)平臺(tái)ModelArts實(shí)操演練匹舞、帶你輕松實(shí)現(xiàn)一鍵AI妝容遷移
3褐鸥、學(xué)會(huì)了這個(gè)技能,可以將任何你心儀的妝容一鍵復(fù)制到你的臉上

本文會(huì)分為以下4個(gè)部分進(jìn)行介紹
1.架構(gòu)講解
2.效果展示
3.數(shù)據(jù)集·實(shí)操
4.華為云Al Gallery

首先提到妝容遷移赐稽,大家想到的是什么呢叫榕,美顏的App講妝容復(fù)制到臉上,還有就是在網(wǎng)購(gòu)化妝品的時(shí)候姊舵,在線試口紅色號(hào)晰绎,粉底,眼影等蠢莺,都是妝容的應(yīng)用,還有我們常用的App一些妝容零如,特效濾鏡等等

1躏将、 架構(gòu)講解

1.1 介紹

妝容遷移是指將目標(biāo)圖上的妝容直接遷移到原圖上的技術(shù),也就是將參考圖像上的妝容遷移到我們的圖片上考蕾,我們還要考慮結(jié)構(gòu)祸憋,光線,姿態(tài)肖卧,表情遮擋等情況

? 傳統(tǒng)方法:側(cè)重于圖像預(yù)處理蚯窥、特征提取和反射操作

? 基于深度學(xué)習(xí)的方法:GAN用于圖像到圖像的遷移任務(wù)

BeautyGAN—正面&簡(jiǎn)單的妝容遷移效果表現(xiàn)良好

PSGAN—處理多種不同的頭部姿態(tài)&表情的面部

CA-GAN—提出顏色判別器,以改善嘴眼區(qū)域的細(xì)粒度妝容遷移

LADN—將多個(gè)重疊區(qū)域的局部判別器用于極致化妝風(fēng)格遷移

LADN比上面3個(gè)的能力要強(qiáng)一些塞帐,可以將一些較復(fù)雜的情況考慮到拦赠,但是它的表現(xiàn)力還是不夠的,表現(xiàn)效果不太好葵姥,所以呢就引出了我們接下來要講的CPM

1.2 Color-Pattern Makeup Transfer(CPM)

Paper:https : //arxiv.org/abs/2104.01867

Github:https : //github.com/VinAlResearch/CPM

這是一篇去年荷鼠,也就是2021年的論文CPM,它有以下四點(diǎn)優(yōu)勢(shì)

優(yōu)勢(shì):

  1. 綜合的妝容遷移方法榔幸,適用于輕盈以及極致的風(fēng)格

  2. 帶有兩個(gè)分支的框架Color Transfer &Pattern Transfer允乐,加入U(xiǎn)Vspace
    中的扭曲面容以消除人臉在形狀,頭部位置和表情方面的差異

  3. 引入了一個(gè)新的makeuptransfer的數(shù)據(jù)集削咆,包含極致風(fēng)格的妝容效果

  4. State-of-the-art

這篇論文在當(dāng)時(shí)的技術(shù)領(lǐng)域也是達(dá)到了最高水平牍疏,也就是State-of-the-art
[圖片上傳失敗...(image-d7ec03-1661493332575)]

接下來我們看看Paper所講的內(nèi)容
[圖片上傳失敗...(image-b08b43-1661493332576)]

接下來給大家介紹UV Map Conversion

2.1 UV Map Conversion

論文提出了一個(gè)結(jié)合色彩變換和圖案添加的妝容遷移方法,設(shè)計(jì)新的結(jié)構(gòu): Color Transfer Branch & Pattern Transfer Branch拨齐,并在訓(xùn)練兩個(gè)網(wǎng)絡(luò)分支時(shí)使用UV 空間中的扭曲臉來消除輸入面在形狀鳞陨,頭部姿勢(shì)和表情方面的差異

? UVmap是計(jì)算機(jī)圖像學(xué)中三維物體紋理映射的一種常見技術(shù)

? 物體的紋理被壓扁成一個(gè)二維圖像,物體的每個(gè)三維頂點(diǎn)都與圖像上的一個(gè)二維位置相關(guān)聯(lián)

? PRNet設(shè)計(jì)了一個(gè)2D UV position map瞻惋,來編碼對(duì)齊三維面部形狀炊邦,它是一個(gè)具有三通道的二維圖像

我們看一下公式
[圖片上傳失敗...(image-689e86-1661493332576)]

2.2 Color transfer branch

采用BeautyGAN提出的框架和loss function编矾,其中最關(guān)鍵的loss是Histogram Matching Loss
[圖片上傳失敗...(image-71d74d-1661493332576)]
[圖片上傳失敗...(image-18f582-1661493332576)]

結(jié)論:與BeautyGAN相比,ColorTansfer分支不僅可以捕捉到色彩馁害,還有化妝的結(jié)構(gòu)以及位置信息窄俏,表現(xiàn)效果更優(yōu)

2.3 Pattern transfer branch

? 傳統(tǒng):做分割操作、解除扭曲碘菜、重新扭曲

? 使用uv position map將其簡(jiǎn)化為圖像分割

? 提出一個(gè)新的數(shù)據(jù)集CPM-Synt-1

? 采用dice loss
[圖片上傳失敗...(image-cdf5db-1661493332576)]
[圖片上傳失敗...(image-17ce53-1661493332576)]

結(jié)論:精準(zhǔn)檢測(cè)和遷移pattern凹蜈,保持其形狀,紋理和位置信息不變忍啸,表現(xiàn)良好

2仰坦、 效果展示

我們來看一下使用UV在Color和Pattern上的效果 ,第一行是color的效果计雌,第二行是pattern分支的效果

[圖片上傳失敗...(image-f71a9a-1661493332576)]

接下來是Color & Pattern& Color-Pattern呈現(xiàn)效果

[圖片上傳失敗...(image-70f6d7-1661493332576)]

3悄晃、 數(shù)據(jù)集·實(shí)操

? MT:包含1115張?jiān)磮D像和2719張參照?qǐng)D像的輕盈化妝容,由BeautyGAN發(fā)布用于訓(xùn)練ColorTransfer

? CPM-Real:3895張多尺寸圖像凿滤,在自然場(chǎng)景下帶有多樣化的極致妝容數(shù)據(jù)

? Sticker:577張高質(zhì)量圖案(花妈橄,水晶,葉子翁脆,字母等等)

[圖片上傳失敗...(image-295521-1661493332576)]

? CPM-Synt-1:555張256*256張紋理圖像眷蚓,用于訓(xùn)練Pattern Transfer

? CPM-Synt-2:包含1625張256*256的三元組圖像,專門為評(píng)估Pattern而設(shè)計(jì)
[圖片上傳失敗...(image-7c4796-1661493332576)]

接下來我們看一下實(shí)操的部分

? Pytorch實(shí)現(xiàn)

? UVconversion和逆向渲染基于PRNet的代碼和模型

? 使用各自的訓(xùn)練模型反番,分別訓(xùn)練PatternTransfer和ColorTransfer這兩個(gè)分支

? Color Transfer :input=256*256 | epochs =300 | batch size=8 | lr= 0.0001 | Adam optimizer

然后是代碼實(shí)際操作的步驟

實(shí)驗(yàn)步驟:

1.將輸入圖像分別轉(zhuǎn)換為UV texture

2.texture被傳遞到兩個(gè)獨(dú)立的分支一color&pattern的妝容遷移

3通過合并這些分支的輸出來形成最后的uv texture沙热,并將該UV texture映射

轉(zhuǎn)換到圖像空間以獲得最終的輸出

4、 華為云Al Gallery

接下來簡(jiǎn)單介紹一下直播講解的案例罢缸,首先我們打開華為云開發(fā)者的Al Gallery AI妝容遷移 下篙贸,可以進(jìn)入如下界面:
[圖片上傳失敗...(image-7d64ec-1661493332576)]
進(jìn)來之后我們等待初始化后會(huì)出現(xiàn)選擇運(yùn)行環(huán)境界面,會(huì)提供限時(shí)免費(fèi)的資源

[圖片上傳失敗...(image-a86b7f-1661493332576)]

我們可以看到整個(gè)的大綱枫疆,瀏覽一下相關(guān)介紹然后下面大概簡(jiǎn)述一下操作步驟歉秫,具體的可以看下官方文檔
[圖片上傳失敗...(image-c394a4-1661493332576)]

4.1.準(zhǔn)備代碼及數(shù)據(jù)

相關(guān)代碼、數(shù)據(jù)和模型都已存放在OBS中养铸,執(zhí)行下面一段代碼即可將其拷貝到Notebook中

import os

import moxing as mox

if not os.path.exists("/home/ma-user/work/CPM"):

mox.file.copy_parallel('obs://modelarts-labs-bj4-v2/case_zoo/makeup_transfer/CPM.zip'雁芙,"/home/ma-user/work/CPM.zip")

os.system("cd /home/ma-user/work;unzip CPM.zip;rm CPM.zip")

if os.path.exists("/home/ma-user/work/CPM"):

print('Download success')

else:

raise Exception('Download Failed')

else:

print("Project already exists")

4.2.安裝所需要的python模塊

!pip install torch==1.6.0 torchvision==0.7.0

!pip install tensorflow==1.14.0

!pip install blend_modes==2.1.0

!pip install segmentation_models_pytorch==0.2.1

!pip install scikit-image==0.19.3

!pip install albumentations==1.2.1

!pip install dlib==19.21.1

4.3導(dǎo)入依賴包

# 關(guān)閉TensorFlow中的warning

# import tensorflow as tf

# tf.logging.set_verbosity(tf.logging.ERROR)

# 進(jìn)入項(xiàng)目路徑

%cd /home/ma-user/work/CPM

/home/ma-user/work/CPM


import argparse

import os

import cv2

import numpy as np

from makeup import Makeup

from PIL import Image

4.4自定義參數(shù)

參數(shù)定義

def get_args():

parser = argparse.ArgumentParser()

parser.add_argument("--checkpoint_pattern", default="./checkpoints/pattern.pth"钞螟, type=str) # pattern預(yù)訓(xùn)練模型

parser.add_argument("--checkpoint_color"兔甘, default="./checkpoints/color.pth", type=str) # color預(yù)訓(xùn)練模型

parser.add_argument("--device"鳞滨, default="cuda"洞焙, type=str) # cuda

# parser.add_argument('--batch_size', default = '1', type = int)

parser.add_argument("--prn"澡匪, default=True熔任, type=bool) # PRNet基于位置圖回歸網(wǎng)絡(luò)的聯(lián)合三維人臉重建與密集對(duì)齊

parser.add_argument("--color_only", default=False唁情, action="store_true")

parser.add_argument("--pattern_only"疑苔, default=False, action="store_true")


parser.add_argument(

"--input"甸鸟,

type=str惦费,

default="./imgs/non-makeup.png",

help="Path to input image (non-makeup)"抢韭, # 輸入圖像

)

parser.add_argument(

"--style"薪贫,

type=str,

default="./imgs/style-2.png"刻恭,

help="Path to style image (makeup style | reference image)"瞧省, #妝容參考圖像

)

parser.add_argument("--alpha", type=float鳍贾, default=0.5鞍匾, help="opacity of color makeup") # Color妝容調(diào)整參數(shù)

parser.add_argument("--savedir", type=str贾漏, default=".") # 輸出保存路徑

args = parser.parse_args(args=[])


print(" ? ──────????? ────── ?")

print("?? hey候学, arguments are here if you need to check ??")

for arg in vars(args):

print("{:>15}: {:>30}".format(str(arg)藕筋, str(getattr(args纵散, arg))))

print()

return args
# 修改默認(rèn)參數(shù)

args.input = "./imgs/non-makeup.png"

args.style = "./imgs/style-6.png"

args.alpha = 0.6

args

Namespace(alpha=0.6, checkpoint_color='./checkpoints/color.pth'隐圾, checkpoint_pattern='./checkpoints/pattern.pth'伍掀, color_only=False, device='cuda'暇藏, input='./imgs/non-makeup.png'蜜笤, pattern_only=False, prn=True盐碱, savedir='.'把兔, style='./imgs/style-6.png')

4.5可視化輸入圖像

圖片轉(zhuǎn)numpy格式

imgA = np.array(Image.open(args.input))

imgB = np.array(Image.open(args.style))

imgB = cv2.resize(imgB, (256瓮顽, 256))

查看待處理圖像及模板圖像

Image.fromarray(np.concatenate([cv2.resize(imgA县好, (256, 256))暖混,imgB]缕贡,axis=1))

4.6加載模型

傳入?yún)?shù),下載resnet50編碼器,分別加載color及pattern預(yù)訓(xùn)練模型晾咪,輸出對(duì)應(yīng)UV Texture

PRNet論文所生成的所有人臉的texture都符合uv_face.png所有器官位置收擦,比如鼻子一定會(huì)在texutre的鼻子那里,不管你是側(cè)臉還是正臉谍倦,uv_kpt_ind.txt這里面定義的就是texture的人臉關(guān)鍵點(diǎn)位置塞赂,是固定的

根據(jù)uv_kpt_ind和UV位置映射圖能找到人臉圖(非紋理圖)上的關(guān)鍵點(diǎn)

import matplotlib.pyplot as plt

def draw_kps(img,kps剂跟,point_size=2):

img = np.array(img*255减途,np.uint8)

for i in range(kps.shape[0]):

cv2.circle(img,(int(kps[i曹洽,0])鳍置,int(kps[i,1]))送淆,point_size税产,(0,255偷崩,0)辟拷,-1)

return img

uv_kpt_ind = np.loadtxt('./PRNet/uv-data/uv_kpt_ind.txt').astype(np.int32)

uv_face = plt.imread('./PRNet/uv-data/uv_face.png')

plt.imshow(draw_kps(uv_face,uv_kpt_ind.T))

plt.axis('off')

4.7遷移 Color 風(fēng)格

Color Only

Color-Transfer Controllabl you can control the obviousness of color-transfer by alpha(0-1)

通過調(diào)整顏色參數(shù)可調(diào)整整體妝容的濃淡程度

def color_makeup(A_txt阐斜, B_txt衫冻, alpha):

color_txt = model.makeup(A_txt, B_txt)

color = model.render_texture(color_txt)

color = model.blend_imgs(model.face谒出, color * 255隅俘, alpha=alpha)

return color

4.8遷移 Pattern 風(fēng)格

def pattern_makeup(A_txt, B_txt笤喳, render_texture=False):

mask = model.get_mask(B_txt)

mask = (mask > 0.0001).astype("uint8")

pattern_txt = A_txt * (1 - mask)[:, :杀狡, np.newaxis] + B_txt * mask[:, :呜象, np.newaxis]

pattern = model.render_texture(pattern_txt)

pattern = model.blend_imgs(model.face, pattern恭陡, alpha=1)

return pattern

output_pattern = pattern_makeup(A_txt蹬音, B_txt)

Image.fromarray(output_pattern)

4.9融合遷移Color + Pattern風(fēng)格

def color_pattern_makeup(A_txt, B_txt子姜, render_texture=False):

color_txt = model.makeup(A_txt楼入, B_txt) * 255

mask = model.get_mask(B_txt)

mask = (mask > 0.001).astype("uint8")

new_txt = color_txt * (1 - mask)[:牧抽, :嘉熊, np.newaxis] + B_txt * mask[:, :扬舒, np.newaxis]

color_pattern = model.render_texture(new_txt)

color_pattern = model.blend_imgs(model.face阐肤, color_pattern, alpha=1)

return color_pattern

4.10輸出圖像處理

對(duì)圖像進(jìn)行裁剪

x2孕惜, y2, x1衫画, y1 = model.location_to_crop()

x2疑枯, y2糊昙, x1弥激, y1

(0, 249愿阐, 0, 236)

保存輸出圖像

save_path = os.path.join(args.savedir以蕴, "result.png")

Image.fromarray((output).astype("uint8")).save(save_path)

print("Completed Please check result in: {}".format(save_path))

4.11更換源圖像和參考圖像進(jìn)行實(shí)驗(yàn)

案例圖像存儲(chǔ)路徑為./imgs/

①點(diǎn)擊左側(cè)操作欄上傳按鈕,直接拖拽文件到指定區(qū)域或點(diǎn)擊選擇文件進(jìn)行上傳舒裤,參考下圖

image.png

②參考下圖觉吭,拖拽文件至左側(cè)文件目錄下


image.png

上傳完圖像之后仆邓,修改輸入?yún)?shù)參數(shù)鲜滩,重新運(yùn)行6-10步

華為云Al Gallery“知識(shí)”+“實(shí)訓(xùn)”的AI開發(fā)社區(qū) 节值,是在ModelArts的基礎(chǔ)上構(gòu)建的一個(gè)開發(fā)者社區(qū)


image.png

下圖介紹了一下Al Gallery免費(fèi)資產(chǎn)的使用流程


image.png

同時(shí)我們可以通過修改代碼,或者通過相關(guān)案例記錄的筆記分享到Al Gallery Notebook上搞疗,也可以通過優(yōu)化代碼來發(fā)布第二版、第三版等桩皿,讓更多的開發(fā)者學(xué)習(xí)豌汇,以上是我的總結(jié)與分享泄隔,大家有什么問題的話可以在評(píng)論區(qū)進(jìn)行互動(dòng)交流

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市佛嬉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌暖呕,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件湾揽,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡钝腺,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門定硝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蔬啡,你說我怎么就攤上這事∠潴。” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵空猜,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我辈毯,道長(zhǎng),這世上最難降的妖魔是什么谆沃? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任仪芒,我火速辦了婚禮唁影,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘据沈。我一直安慰自己,他們只是感情好卓舵,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著掏湾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪融击。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天匣屡,我揣著相機(jī)與錄音,去河邊找鬼捣作。 笑死,一個(gè)胖子當(dāng)著我的面吹牛券躁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播也拜,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼慢哈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起卵贱,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤瓦侮,失蹤者是張志新(化名)和其女友劉穎艰赞,沒想到半個(gè)月后肚吏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狭魂,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡罚攀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了杯瞻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡魁莉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出旗唁,到底是詐尸還是另有隱情,我是刑警寧澤检疫,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布祷嘶,位于F島的核電站屎媳,受9級(jí)特大地震影響论巍,放射性物質(zhì)發(fā)生泄漏烛谊。R本人自食惡果不足惜嘉汰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望郑现。 院中可真熱鬧,春花似錦接箫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽废累。三九已至,卻和暖如春邑滨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背掖看。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工面哥, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人尚卫。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像吱涉,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子邑飒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容