機器學習根據文字生成圖片教程(附python程式碼)

李博Garvin發表於2018-09-05

背景

其實在過往我們生活的世界裡,當人們需要獲取資訊的時候,更多地強調的是資訊的檢索和遍歷,意味著去已經存在的物品中找到自己合適的。在我看來這是一種很低階的生活形態,比如我的意識中有一個某種圖案的杯子,想要它,只能開啟淘寶根據標籤去找已經設計好的款式有沒有相近的,而不能直接根據我的想法自動生成一個我需要的杯子。

又比如,我想要一張貓正在喝水的照片,只能去搜尋引擎裡去根據關鍵詞搜尋已經存在的貓喝水的照片,而不是自動生成一張符合我要求的照片。隨著人工智慧的升級,這種低階的資訊獲取方式一定會淘汰。

今天就介紹一種深度學習方法,如何根據文字自動生成圖片。先來看下效果:

輸入文字:

sky is above the grass, man standing on the grass

生成的圖片,是不是有點神奇:
這裡寫圖片描述

詳細流程

關於具體的演算法細節可以看下這個論文:“Image Generation from Scene Graphs”

1.下載程式碼

程式碼可以在Github找到: https://github.com/google/sg2im?utm_source=mybridge&utm_medium=blog&utm_campaign=read_more
需要把sgim資料夾複製到scripts資料夾下面:
這裡寫圖片描述

2.安裝需要的第三方庫

建議用python3以上版本,在資料夾下執行

sudo pip3 install -r requirements.txt

3.下載模型

首先自行安裝好wget,然後在程式碼目錄下執行:

bash scripts/download_models.sh

4.建立圖片

首先,要先自己搞個描述指令碼,這個指令碼需要描述生成圖片中的物件以及物件間的位置關係。比如以下指令碼(看過《機器學習實踐應用》的同學是不是會眼熟,有點像裡面知識圖譜的內容):

[
{
"objects": ["car", "street", "line", "sky"],
"relationships": [
[0, "on", 1],
[2, "on", 1],
[3, "above", 1]
]
}
]

描述的是car在street的上面,line在street的上面,sky也在street上面。然後在程式碼的根目錄下執行以下程式碼(程式碼中的括號內容是註釋,執行前需要去掉):

python3 scripts/run_model.py(預測指令碼) --checkpoint sg2im-models/vg128.pt(下載好的模型所在地址) --scene_graphs aohai.json(上面寫的指令碼) --output_dir outputs(圖片輸出路徑)

最終生成的圖片效果:

這裡寫圖片描述

總結

是不是很好玩,可以自己任意新增描述指令碼,生成自己想要的圖片,是不是非常酷。目前來看畫素還比較低,希望以後該專案可以繼續更新,可以生成更多高清大圖。

相關文章