本文來自AI新媒體量子位(QbitAI)
正在研究機器學習的全棧碼農Dendrick Tan在部落格上釋出了一份教程+代碼:用PyTorch實作将色塊拼湊成的圖檔,轉換為一幅Bob Ross風格的畫作。
說到Bob Ross,這頭蓬松的秀發你可能有點印象……

他在電視節目《歡樂畫室》上教了11年畫畫,還推出了同名的美術用品品牌,也出版了不少教材。
他的畫,基本上是這個風格:
量子位今天要介紹的這個教程,就叫drawlikebobross。
drawlikebobross項目的目标是,将一張色塊拼湊而成的圖檔轉變成(看起來有點像)Bob Ross油畫風格的圖像,如下圖所示:
在我們開始訓練網絡之前,首先需要擷取資料來建構資料集。幸運的是,通過谷歌搜尋,我在twoinchbrush網站上找到了一個關于Bob Ross作品的資料集。
這個網站的優點是它包含所有的Bob Ross作品,并按照如下格式列出:
<a>http://www.twoinchbrush.com/images/painting1.png</a> <a>http://www.twoinchbrush.com/images/painting2.png</a> <a>http://www.twoinchbrush.com/images/painting3.png</a> <a>http://www.twoinchbrush.com/images/paintingN.png</a>
開源代碼中的scrapper.sh就是用來完成這項工作的。
由于我們的目标是将色塊圖檔轉換為Bob Ross風格的圖像,是以我決定使用平均偏移濾波(mean shift filtering)來實作圖像平滑操作,将得到的色塊圖像作為輸入,原始圖像作為輸出。
為了最大限度地減少訓練時間,我将大部分原始圖像預處理成平滑的色塊圖檔,并存儲為HDF5格式。由于HDF5的快速可讀寫性能,我們能夠快速地測試不同的神經網絡結構,無需在訓練時間内多次重複預處理資料,這樣,就節省了大量的時間。
部落格介紹中對AAE的評價是:“我覺得本文中最有趣的想法是不利用變分推理方法,而是使用對抗訓練的方法将編碼器的輸出分布q(z | x)映射到任意先驗分布p(z)的概念。”
△ 對抗自動編碼器AAE的網絡結構
我們希望将色塊圖檔輸入到網絡,輸出為Bob Ross風格的圖像。具體實作流程如下。
△ 利用AAE網絡實作風格遷移
我選擇使用PyTorch來實作這個模型,是因為我一直在用它,也是因為與TensorFlow相比,這個架構的API很好用,且保持着很強的一緻性,自從用了它,效率提升了幾十倍。
該模型的訓練過程可以分為四個部分:
models.py:神經網絡的結構;
loader.py:資料載入操作;
trainer.py:訓練網絡的超參數配置;
train.py:訓練的啟動檔案;
通過這種方式,如果想改變神經網絡的結構,隻需要再次編輯models.py和trainer.py,很容易進行修改。
網絡訓練的時間越長,則網絡輸出Bob Ross風格的圖像效果越好。
由于我使用的是ThinkPad t460s,自帶的GPU計算性能不好,是以我在AWS上租了一個g2工作站,花了大約一天的時間,運作了2500步,來訓練這個模型。
drawlikebobross的開源代碼中還包含一個網頁App,歡迎下載下傳測試,告訴我們結果如何。
也強烈推薦想嘗試PyTorch的同學,花兩天時間用這樣一個小項目練手~
我們整理了文章所有相關連結,在量子位公衆号(QbitAI)對話界面回複“BobRoss”檢視。
本文作者:王新民
原文釋出時間:2017-04-09