草圖秒變風景照,英偉達神筆馬良 GauGAN 終於開源了
馬良的圖片怎麼畫
【新智元導讀】
英偉達最近釋出的影象合成 “黑魔法” GauGAN 效果令人驚歎,現在,相關程式碼和預訓練模型終於公開了。
還記得英偉達在 GTC 2019 披露的令人驚歎的影象生成器 GauGAN 嗎?僅憑几根線條,草圖秒變風景照,自動生成照片級逼真影象的技術堪比神筆馬良。
圖中,左邊是人類操作員畫的,右邊是 AI 直接 “簡單加上幾筆細節” 後生成的。在普通人看來,右邊的影象幾乎毫無破綻,看不出這並非一張風光照片,而是 AI 生成的虛擬海灘。
從圖中我們可以看出,GauGAN 並不是像 Photoshop 裡貼一個圖層那樣,簡單的把圖形貼上去,而是根據相鄰兩個圖層之間的對應關係對邊緣進行調整。比如石頭在水裡的倒影應該是什麼樣的、被瀑布沖刷的山石應該是怎樣的狀態、近處的山和遠處的山之間的層次應該如何表現…
請看下面的 demo:
英偉達GauGAN demo
https://www。zhihu。com/video/1101905174322315264
相關閱讀:
英偉達再出黑魔法GauGAN:憑藉幾根線條,草圖秒變風景照
GauGAN 背後的技術來自來自英偉達和 MIT 的研究團隊。這個團隊,包括來自英偉達的 Ting-Chun Wang、劉明宇(Ming-Yu Liu),Taesung Park (當時在英偉達實習),以及來自 MIT 的朱儁彥(Jun-Yan Zhu)。
論文地址:
https://
arxiv。org/pdf/1903。0729
1。pdf
他們提出一種名為
“空間自適應歸一化”(SPADE)
的語義影象合成技術,論文已經被 CVPR 2019 接收,併入選 oral paper。
近日,SPADE 的程式碼終於釋出,包括預訓練模型等,有興趣的同學趕緊來試試復現吧。
SPADE:空間自適應歸一化
GauGAN 是基於名為 “空間自適應歸一化”(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
git
clone
https
:
//
github
。
com
/
NVlabs
/
SPADE
。
git
cd
SPADE
/
這段程式碼需要 PyTorch 1。0 和 python 3+。請透過以下方式安裝依賴項
pip install -r requirements。txt
程式碼還需要同步的 Synchronized-BatchNorm-PyTorch rep。
cd models/networks/
git clone https://github。com/vacancy/Synchronized-BatchNorm-PyTorch
cp Synchronized-BatchNorm-PyTorch/sync_batchnorm 。 -rf
cd 。。/。。/
為了重現論文中報告的結果,你需要一臺有 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 /‘中,然後執行
cd checkpoints
tar xvf checkpoints。tar。gz
cd 。。/
2、使用預訓練模型生成影象
python test。py ——name [type]_pretrained ——dataset_mode [dataset] ——dataroot [path_to_dataset]
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、訓練
# To train on the Facades or COCO dataset, for example。
python train。py ——name [experiment_name] ——dataset_mode facades ——dataroot [path_to_facades_dataset]
python train。py ——name [experiment_name] ——dataset_mode coco ——dataroot [path_to_coco_dataset]
# To train on your own custom dataset
python train。py ——name [experiment_name] ——dataset_mode custom ——label_dir [path_to_labels] —— image_dir [path_to_images] ——label_nc [num_labels]
你還可以指定許多選項,請使用 python train。py ——help。
測試
測試與測試預訓練模型相似
python test。py ——name [name_of_experiment] ——dataset_mode [dataset_mode] ——dataroot [path_to_dataset]
GitHub 地址:
NVlabs/SPADE
新智元 · AI_era
每日推送 AI 領域前沿學術解讀、AI 產業最新資訊
戳右上角【+ 關注】↗↗
喜歡請分享、點贊吧
上一篇:有哪些孤獨的故事?