第一列和第六列為輸入圖像,其余列均為StarGAN生成圖像 以下是論智對論文部分內(nèi)容的編譯: 最近的研究顯示,學(xué)界已經(jīng)在兩個域圖像到圖像轉(zhuǎn)換上取得了長足進(jìn)展,但是,這些方法在可擴(kuò)展性和魯棒性上仍有諸多局限,且效率低下。當(dāng)需要對k個域上的圖片進(jìn)行圖像轉(zhuǎn)換時,現(xiàn)有模型需要事先訓(xùn)練好k(k?1)生成器。如下圖(a)所示,只有當(dāng)12個生成器都完成訓(xùn)練,該模型才能實現(xiàn)轉(zhuǎn)換,同時,模型雖然能習(xí)得4個數(shù)據(jù)集的所有特征,但生成器得到的只是兩個域的特征信息,因此它無法對整個數(shù)據(jù)集做到充分、合理利用。 左:cross-domain模型;右:StarGAN 為了解決這一問題,團(tuán)隊提出了StarGAN,一種可擴(kuò)展的、只用一個模型就能執(zhí)行多個域圖片到圖片轉(zhuǎn)換任務(wù)的方法。如上圖(b)所示,StarGAN允許來自不同域的多個數(shù)據(jù)集在同一個神經(jīng)網(wǎng)絡(luò)內(nèi)并行訓(xùn)練,而其生成器也能充分利用來自5個域的圖像特征。不同于直接提取圖片信息,該方法首先會讀取輸入的圖像和圖像所在的域,之后將圖像信息轉(zhuǎn)化進(jìn)相應(yīng)的域,并用標(biāo)簽(binary或one hot vector)注明信息。當(dāng)需要進(jìn)行圖像對圖像轉(zhuǎn)換時,StarGAN只需對照標(biāo)簽將圖片輸入目標(biāo)域即可。 實驗證明,這種方法擁有更強(qiáng)的靈活性和可擴(kuò)展性,它生成圖片的質(zhì)量與現(xiàn)有方法相當(dāng),在面部特征有效遷移和面部表情合成上的表現(xiàn)也十分出色。 綜觀全文,團(tuán)隊的工作主要有以下3點:
什么是StarGAN? StarGAN是一個生成對抗網(wǎng)絡(luò),它由兩部分組成:一個判定器D和一個生成器G。如下圖所示: 當(dāng)一真一假兩組圖像數(shù)據(jù)集輸入模型后,判定器D首先負(fù)責(zé)從中歸類出它認(rèn)為是“真的”的特征,并放進(jìn)一個相應(yīng)的域類(domain classification)(圖a)。隨后,研究人員將測試圖片和目標(biāo)域(希望轉(zhuǎn)化的方向)輸入模型,由生成器G結(jié)合兩者信息生成一幅“虛假”圖像,再將“虛假”圖像結(jié)合目標(biāo)域輸入模型訓(xùn)練(圖b)。接收到新的輸入信息后,生成器G根據(jù)目標(biāo)域信息嘗試把“虛假”圖像還原成原始圖像,并將重建的新圖輸入前一個步驟(圖c)。判定器D根據(jù)生成器G傳來的“虛假”圖像,試圖從中分離出和真實圖片難以區(qū)分的特征,并歸類到D的目標(biāo)域(圖d)。 模型訓(xùn)練 構(gòu)建完StarGAN,研究人員進(jìn)行了一系列訓(xùn)練實驗,他們主要選取了兩個數(shù)據(jù)集:CelebA和RaFD。 CelebA的全稱是CelebFaces Attributes,它是香港中文大學(xué)湯曉鷗教授實驗室公布的大型人臉識別數(shù)據(jù)集,包含202599張帶注釋的人臉圖像及40余種人臉屬性。研究人員將圖片尺寸由178×218調(diào)整至128×128,并構(gòu)建了7個域:頭發(fā)顏色(黑色/金色/棕色)、性別(男/女)和年齡(年輕/年邁)。 StarGAN在CelebA中的訓(xùn)練情況 RaFD全稱Radboud Faces Database,是一個包含有4824張圖片的數(shù)據(jù)集,它內(nèi)部可分為67類(包括高加索地區(qū)男性、女性、兒童及摩洛哥男性等),每一類都包含從3個角度捕捉到的8種面部表情。研究人員也對圖像做了調(diào)整,他們從原圖中截取了大小為256 × 256的臉部特寫,將尺寸調(diào)整為128×128,并從中抽取10%的圖像作為測試集,保留剩下的90%為訓(xùn)練集。 StarGAN在RaFD中的訓(xùn)練情況 所有模型都是用D. Kingma和J. Ba在2014年提出的Adam訓(xùn)練的,其中β1 = 0.5,β2 = 0.999。訓(xùn)練數(shù)據(jù)的批大?。╞atch size)均為16,當(dāng)在CelebA中訓(xùn)練時,前10代的學(xué)習(xí)率為0.0001,它會在之后的10代線性衰減至0。而在RaFD中,為了彌補(bǔ)數(shù)據(jù)缺失,研究人員將前100代的學(xué)習(xí)率設(shè)為0.0001,并讓其在后100代中線性衰減至0。整個訓(xùn)練在一個NVIDIA Tesla M40 GPU上進(jìn)行,耗時約一天。 訓(xùn)練成果 為了凸顯StarGAN的效果,研究人員設(shè)置了3個對照組:DIAT、CycleGAN和IcGAN。前兩者都是跨領(lǐng)域模型,可用來比較模型在執(zhí)行單一或多屬性傳輸任務(wù)時的表現(xiàn)。它們采用的方法是多步驟轉(zhuǎn)換,如在更換頭發(fā)顏色后再改變性別。 CelebA訓(xùn)練成果,第一列為輸入,其余列為輸出。H:發(fā)色;G:性別;A:年齡 上圖展示了各模型在CelebA上的訓(xùn)練成果。如圖所示,和兩個跨領(lǐng)域模型相比,StarGAN模型生成的圖片質(zhì)量更優(yōu),轉(zhuǎn)換效果也更好,這很大程度上源于多任務(wù)學(xué)習(xí)框架的引入,使得神經(jīng)網(wǎng)絡(luò)并不是執(zhí)行一個固定的轉(zhuǎn)換操作,而能形成自然的過渡。 同時,和IcGAN相比,StarGAN模型生成的圖像保留了更多面部特征,這可能是因為后者用卷積層激活地圖來維護(hù)空間信息,并將之作為潛在信息,而前者則只是直接使用了一個低維潛在向量。 單一屬性轉(zhuǎn)換任務(wù)中各模型排名 多屬性轉(zhuǎn)換任務(wù)中各模型排名 研究人員在Amazon Mechanical Turk(AMT)上評估了4個模型的訓(xùn)練效果,具體排名如上兩張表所示:StarGAN較其他方法有顯著優(yōu)勢。在涉及多個屬性轉(zhuǎn)換的情況下,它能在模型訓(xùn)練中隨機(jī)產(chǎn)生目標(biāo)域標(biāo)簽,這使它能保留更多原有的面部特征。 之后,研究人員又在RaFD數(shù)據(jù)集中訓(xùn)練模型合成面部表情。在訓(xùn)練中,他們將8種不同表情定義為8個域,并把它們固定為“中性”表達(dá)式,當(dāng)輸入一個目標(biāo)域后,這個域就成了一個“異類”,StarGAN要做的只是在一張“中性”人臉中加入特定面部表情。 RaFD訓(xùn)練成果,第一列為輸入,其余列為輸出 如上圖所示,在所有參與實驗的模型中,StarGAN訓(xùn)練的模型生成的圖片最為清晰自然,它很好地保留了人臉的基礎(chǔ)形象和面部特征。雖然DIAT、CycleGAN模型也保留了大部分臉部特點,但它們生成的圖像都十分模糊。而IcGAN甚至無法保留原圖像的基礎(chǔ)信息,生成了一些男性圖像。 表情合成任務(wù)中各模型出錯率排名 在RaFD數(shù)據(jù)集中訓(xùn)練后,StarGAN模型生成圖像的準(zhǔn)確率高達(dá)99.55%。研究人員把成果導(dǎo)入AMT進(jìn)行評估,發(fā)現(xiàn)它的分類錯誤率遠(yuǎn)低于其他三類模型。同時,DIAT和CycleGAN由于架構(gòu)設(shè)計因素,一次只能學(xué)習(xí)1000張圖片,而StarGAN則能同時學(xué)習(xí)所有4000余張圖片,效率更高,模型性能也更好。上表第3列顯示了各模型在進(jìn)行一次圖像對圖像轉(zhuǎn)換時所需的參數(shù),DIAT需要7個,CycleGAN需要14個,而StarGAN由于只有一個生成器和一個判定器,在跨域轉(zhuǎn)換的情況下,它只需選取1個特定參數(shù)就可在目標(biāo)域內(nèi)對圖像做處理。 搞怪明星臉 輸入:一個正常的湯唯 輸出:黑發(fā)湯唯、金發(fā)湯唯、棕發(fā)湯唯 輸出:男版湯唯、老年版湯唯、金發(fā)男版湯唯 輸出:金發(fā)老年版湯唯、老漢版湯唯(局...局座?)、金發(fā)老漢版湯唯 輸入:一個正常的暮光女 輸出:生氣、輕蔑、惡心 輸出:害怕、開心、自然 輸出:傷感、驚訝 (更多清晰搞怪大圖,請訪問論文或私信小編下載論文) 結(jié)語 總而言之,這是一個偉大的創(chuàng)新,同時也是一個非常有趣的實踐。研究人員在reddit上分享了自己的成果后,3天即收獲過千的好評,并成功引起“GANs之父”Ian Goodfellow注意,后者在twitter上對論文做了傾情推薦。 較之以前的方法,StarGAN的擴(kuò)展性更強(qiáng)、生成圖片質(zhì)量更高,它引入了一種多任務(wù)學(xué)習(xí)背后的泛化能力設(shè)置,同時提出用標(biāo)簽控制各個圖像域。從原則上說,這個對抗生成網(wǎng)絡(luò)能用于所有域之間圖像到圖像的轉(zhuǎn)換。最后,據(jù)研究人員表示,未來他們的目標(biāo)之一是把StarGAN應(yīng)用到風(fēng)格遷移上。 實現(xiàn)方法 環(huán)境
具體步驟 1.復(fù)制數(shù)據(jù)庫 $ git clone https://github.com/yunjey/StarGAN.git$ cd StarGAN / 2.下載數(shù)據(jù)集
$ bash download.sh
由于不是公開數(shù)據(jù)集,可前往官網(wǎng)(搜RaFD或私信小編)請求訪問。 獲得數(shù)據(jù)集后,首先把它分為90%的訓(xùn)練集和10%的測試集,之后將圖片中的人臉部分以面部為中心裁剪為256x256大小的圖片,并以下圖所示格式儲存: 3.訓(xùn)練StarGAN
$ python main.py--mode = ' train '-- dataset = ' CelebA '-- c_dim = 5 --image_size = 128 --sample_path = ' stargan_celebA / samples '-- log_path = ' stargan_celebA / logs ' --model_save_path = ' stargan_celebA / models ' -- result_path = ' stargan_celebA / results '
$ python main.py--mode = ' train '-- dataset = ' RaFD '-- c_dim = 8 --image_size = 128 --num_epochs = 200 --num_epochs_decay = 100 --sample_step = 200 --model_save_step = 200 --sample_path = ' stargan_rafd / samples '-- log_path = ' stargan_rafd / logs ' --model_save_path = ' stargan_rafd / models ' -- result_path = ' stargan_rafd / results '
$ python main.py--mode = ' train '-- dataset = ' Both '-- image_size = 256 --num_iters = 200000 --num_iters_decay = 100000 --sample_path = ' stargan_both / samples '-- log_path = ' stargan_both / logs ' --model_save_path = ' stargan_both / models ' -- result_path = ' stargan_both / results ' 4.測試StarGAN
$ python main.py--mode = ' test '-- dataset = ' CelebA '-- c_dim = 5 --image_size = 128 --test_model = ' 20_1000 ' --sample_path = ' stargan_celebA / samples '-- log_path = ' stargan_celebA / logs ' --model_save_path = ' stargan_celebA / models ' -- result_path = ' stargan_celebA / results '
$ python main.py--mode = ' test '-- dataset = ' RaFD '-- c_dim = 8 --image_size = 128 --test_model = ' 200_200 '-- rafd_image_path = ' data / RaFD / test ' --sample_path = ' stargan_rafd / samples '-- log_path = ' stargan_rafd / logs ' --model_save_path = ' stargan_rafd / models ' -- result_path = ' stargan_rafd / results '
|
|