畫貓貓哄女孩子好浪漫喔!
來自專欄極光日報132 人贊了文章
簡評:國外有個男孩子,為了哄女孩子開心,訓練了一個 BEGAN 的神經網路模型來畫小貓貓!真的很熱愛代碼了(誤
Zack Nado 是 Google Brain 的一名工程師,他和他的女朋友都是 Pusheen(胖吉貓)的超級粉絲。國內可能對 Pusheen 不太熟悉,它是由 Claire Belton 和 Andrew Duff 兩位藝術家創作的一隻豐滿的灰色虎斑短毛貓,Facebook 設定頁面的插圖幾乎都是 Pusheen。
所以呢,為了給女朋友過生日,Zack 就開始嘗試創建一個機器學習程序來畫 Pusheen!
Zack 創建的是「Generative Adversarial Network」,簡稱「GAN」,即生成式對抗網路,是目前很流行的機器學習程序類型。
▎製作貓貓數據集
為了讓神經網路對畫貓貓這件事有所了解,就需要給它們足夠多的目標圖像,多多益善。但這對於 Pusheen 來說是個小問題,因為並沒有這麼多 Pusheen 圖像。和那些動輒 50,000-1,200,000 個圖像的標準機器學習數據集相比,Pusheen 的圖像實在太少了。
所以 Zack 就用了些小技巧來製作新圖像 —— 將原圖旋轉、縮放、翻轉!
有了足夠多的貓貓圖片,就可以將其使用在神經網路中了!
▎訓練神經網路
之所以稱之為「生成式對抗網路」,是因為這個模型中包含兩個模塊 —— 生成模型(Generative Model)和判別模型(Discriminative Model),我們可以這樣簡單理解:
- 判別器學習生成器產生的圖像中的缺陷,以便它能從假圖像中挑選出真實的圖像
- 生成器學習如何生成與真實圖像類似的圖像,以使判別器無法區分
於是這個模型中的兩個模塊都有自己的目標,我們就可以開始訓練神經網路了。典型的設置是這樣的:
- 給判別器一些真實的圖像,讓它知道 Pusheen 貓長什麼樣子
- 給生成器一些隨機數,讓它開始生成一些圖像
- 將生成的圖像傳給判別器,讓判別器知道生成器生成了什麼圖像
- 重複 Step 1
在幾十萬次重複後,我們就擁有了一個擅長製作 Pusheen 的發生器,以及一個在真偽圖像中徘徊的鑒別器了。下面這個視頻能讓我們直觀地看到神經網路的工作進度 —— 首先學習圖像的基本知識(比如白色背景上的灰色圓形物體),然後逐漸變得複雜(如耳朵和尾部),接著是面部,最後越來越接近我們的小貓貓!
神經網路訓練過程 https://www.zhihu.com/video/1007574883244646400▎結果
下面是不同模型生成的圖像(不同參數設置 生成的圖像是不同的)
當然也有一些翻車的……
感興趣的話可以點進原文鏈接看看,Zack 在他的博客中還設置了參數控制項,可以讓你自行設置參數,並且實時看到生成模型的變化。
另外,還有一篇專業版本 (Expert) 提供給機器學習的人士閱讀,真的很貼心了!人家有女朋友不是沒有道理的 ~
原文鏈接:
Generating Pusheen with AI
推薦閱讀:
Python 的數學仙境之旅
極光日報,極光開發者旗下媒體。
每天導讀三篇英文技術文章。
推薦閱讀:
※上海千畝櫻花林爭相綻放 空中鳥瞰粉紅色花海好浪漫
※夏日浪漫里的一場華麗邂垢
※你那個愛足球的老公,是時候給你辦場浪漫的婚禮了~
※東歐五國掠影(三)維也納之浪漫
※【輕鬆周末】薩克斯金曲《伴你一生》,冬日裡最溫暖的浪漫!