當前位置:
首頁 > 新聞 > 草圖秒變風景照,英偉達神筆馬良GaoGAN終於開源了

草圖秒變風景照,英偉達神筆馬良GaoGAN終於開源了

新智元報道

編輯:肖琴

【新智元導讀】英偉達最近發布的圖像合成「黑魔法」GaoGAN效果令人驚嘆,現在,相關代碼和預訓練模型終於公開了。

還記得英偉達在 GTC 2019 披露的令人驚嘆的圖像生成器 GaoGAN 嗎?僅憑几根線條,草圖秒變風景照,自動生成照片級逼真圖像的技術堪比神筆馬良。

圖中,左邊是人類操作員畫的,右邊是 AI 直接 「簡單加上幾筆細節」 後生成的。在普通人看來,右邊的圖像幾乎毫無破綻,看不出這並非一張風光照片,而是 AI 生成的虛擬海灘。

從圖中我們可以看出,GauGAN 並不是像 Photoshop 里貼一個圖層那樣,簡單的把圖形貼上去,而是根據相鄰兩個圖層之間的對應關係對邊緣進行調整。比如石頭在水裡的倒影應該是什麼樣的、被瀑布沖刷的山石應該是怎樣的狀態、近處的山和遠處的山之間的層次應該如何表現…

GaoGAN 背後的技術來自來自英偉達和 MIT 的研究團隊。這個團隊,包括來自英偉達的 Ting-Chun Wang、劉明宇(Ming-Yu Liu),Taesung Park (當時在英偉達實習),以及來自 MIT 的朱俊彥(Jun-Yan Zhu)。

論文地址:https://arxiv.org/pdf/1903.07291.pdf

他們提出一種名為「空間自適應歸一化」(SPADE)的語義圖像合成技術,論文已經被 CVPR 2019 接收,併入選 oral paper。

近日,SPADE 的代碼終於發布,包括預訓練模型等,有興趣的同學趕緊來試試復現吧。

SPADE:空間自適應歸一化

GaoGAN 是基於名為 「空間自適應歸一化」(spatially-adaptive normalization, SPADE) 技術實現的。該方法通過一個簡單但有效的層,在給定輸入語義布局的情況下合成照片級真實的圖像。

以前的方法直接將語義布局作為輸入提供給網路,然後通過卷積、歸一化和非線性層進行處理。我們證明了以前的方法不是最優的,因為歸一化層往往會消除語義信息。

為了解決這個問題,我們建議使用輸入布局,通過空間自適應的、學習的變換來調整歸一化層中的激活。

在幾個具有挑戰性的數據集上的實驗表明,與現有方法相比,SPADE 在視覺保真度和與輸入布局的對齊方面具有優勢。最後,我們的模型允許用戶輕鬆地控制合成結果的樣式和內容,以及創建多模態的結果。

方法簡述

在許多常見的歸一化技術中,如 Batch Normalization (Ioffe et al., 2015),在實際歸一化步驟之後會應用到學習的 affine layers (如在 PyTorch 和 TensorFlow) 中。

在 SPADE 中,affine layers 是從語義分割映射中學習的。這類似於條件歸一化 (De Vries et al., 2017 和 Dumoulin et al., 2016),除了學習的 affine parameters,還需要空間自適應,這意味著我們將對每個語義標籤使用不同的縮放和偏差。

使用這種簡單的方法,語義信號可以作用於所有層的輸出,而不受可能丟失這些信息的歸一化過程的影響。此外,由於語義信息是通過 SPADE 層提供的,所以可以使用隨機的潛在向量作為網路的輸入,從而實現操縱所生成的圖像的樣式。

與現有方法的比較

SPADE 在 COCO-Stuff 數據集上的性能優於現有方法。因為具有更多的場景和標籤,COCO-Stuff 數據集比 Cityscapes 數據集更具挑戰性。上面的圖片比較了 GRN、pix2pixhd 以及 SPADE 的效果。

應用到 Flickr 圖片

由於 SPADE 適用於不同的標籤,因此可以使用現有的語義分割網路對其進行訓練,學習從語義映射到照片的反向映射。上面這些圖片是由 SPADE 對從 Flickr 上抓取的 40k 張圖片進行訓練生成的。

代碼開源

安裝

克隆這個 repo

這段代碼需要 PyTorch 1.0 和 python 3 。請通過以下方式安裝依賴項

代碼還需要同步的 Synchronized-BatchNorm-PyTorch rep.

為了重現論文中報告的結果,你需要一台有8個 V100 GPU 的 NVIDIA DGX1 機器。

數據集準備

對於 COCO-Stuff、Cityscapes 或 ADE20K,必須預先下載數據集。請在相關網頁下載。

準備 COCO-Stuff 數據集。圖像、標籤和實例映射應該與數據集/coco_stuff/中的目錄結構相同。特別地,我們使用了一個實例映射,它結合了 「things instance map」 和 「stuff label map」 的邊界。我們使用了一個簡單的腳本數據集/coco_generate_instance_map.py。請使用pip install pycocotools安裝pycocotools,並參考腳本生成實例映射。

準備 ADE20K 數據集。解壓數據集後,將 jpg 圖像文件ADEChallengeData2016/images/和 png 標籤文件ADEChallengeData2016/annotatoins/放在同一個目錄中。

使用預訓練模型生成圖像

數據集準備好後,就可以使用預訓練模型生成圖像。

1、從 Google Drive Folder 下載預訓練模型的 tar,保存在 "checkpoint /『中,然後運行

2、使用預訓練模型生成圖像

3、輸出圖像默認存儲在./results/[type]_pretrained/。

訓練新模型

可以使用以下命令訓練新模型。

1、準備數據集

要在論文中的數據集上訓練,可以下載數據集並使用--dataset_mode選項,該選項將選擇載入BaseDataset上的哪個子類。對於自定義數據集,最簡單的方法是使用./data/custom_dataset。通過指定選項--dataset_mode custom,以及--label_dir [path_to_labels] --image_dir [path_to_images]。你還需要指定更多選項,例如--label_nc(數據集中標籤類的數目),--contain_dontcare_label(指定是否有一個未知的標籤),或者--no_instance(表示地圖數據集沒有實例)。

2、訓練

你還可以指定許多選項,請使用 python train.py --help.

測試

測試與測試預訓練模型相似

GitHub地址:

https://github.com/NVlabs/SPADE


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 新智元 的精彩文章:

如何一次上完北大、清華、浙大、中科院?請看Github課程共享計劃

TAG:新智元 |