圖片風格快速轉換的簡單web實現

圖片風格快速轉換的簡單web實現

圖片風格轉換,是指利用深度學習算法學習某種風格圖片的特徵,將其應用到另一張圖片中,合成新風格的圖片,目前技術較爲成熟,github上有很多有趣的項目與應用。

本項目核心代碼基於fast-neural-style-tensorflow,在此基礎上,添加了簡單的flask框架,實現了頁面上傳圖片,選擇轉換風格,生成轉換圖片並展示的流程。

項目的介紹、配置與部署見Github,地址:fast-neural-style-flask

一、核心代碼分解

由於我對圖像的深度學習算法和web都是剛入門學習,所以接下來只是簡單介紹一下,不涉及核心算法。如果文中有說的不對的地方,還請大家多多指正。

我將這個項目分爲三個部分:訓練風格模型,實現圖片轉換,flask框架。

1. 訓練風格模型

原項目中,作者提供了重新訓練模型的方法,以訓練鉛筆畫風格 pencil 爲例。

首先,需要下載 VGG16 model 預訓練模型和 COCO dataset 數據集。將模型存放在根目錄新建 pretrained 文件夾中,將數據集解壓後,用軟鏈接指向train2014。

然後,準備風格圖片pencil.jpg,存放在img/pencil.jpg文件夾中。

下一步,準備配置文件pencil.yml,參考conf/wave.yml,修改風格圖片和模型名字。

最後,執行命令

python train.py -c conf/pencil.yml

2.快速風格轉換

在上一步中,我們生成了鉛筆畫風格模型,保存在 models/pencil.ckpt-done 中。

執行命令

python eval.py --model_file models/pencil.ckpt-done --image_file img/test.jpg

即可生成test.jpg的鉛筆畫風格圖片。

online_eval.py代碼文件是將eval.py稍微做了一點修改,便於web框架調用。

3.flask框架

不得不說,前端也是個技術活,整個項目中這部分內容花費的時間是最長的,ajax、JQ稍有不慎就出現各種問題。。。

flask服務端代碼文件爲predict_flask.py,使用了gevent協程包,整個邏輯爲:

頁面上傳圖片和選擇風格 --> 判斷圖片是否合法 --> 生成圖片唯一id --> 保存圖片 --> 調用模型併合成圖片到指定目錄 --> 將合成圖片目錄返回給頁面 --> ajax讀取合成圖片並展示。

前端頁面使用了ajax,實現了不刷新頁面展示結果。頁面有點簡陋,但是對於零基礎的我來說,真的用了洪荒之力!

二、開發web遇到的問題以及解決方法

1. 訓練新的模型較爲耗時,需要較高的資源。

在12G顯卡的GPU上運行,大約需要4小時多的時間。

2. 風格轉換的效果如何?

原項目提供了一些參數可以調試,但是需要考慮訓練成本。總體來說,如果圖片的線條較爲清晰、對比度高的情況下,效果比較好。

3. gevent的安裝與部署

windows系統可以安裝gevent,但是無法使用。mac os 不能直接使用pip安裝,需要從源代碼處clone並build。linux系統直接pip安裝即可。

4. ajax傳遞圖片

本來想用form序列化的方式傳遞參數,試了很多網上查找的方法,最後還是用FormData上傳成功了。

5. ajax接收返回數據

後臺正確執行程序並返回正確結果,ajax卻總是跳進error:function()中,是因爲返回的數據類型與dataType不一致導致的。

6. ajax展示圖片

ajax只能讀取static文件夾中的靜態文件,所以要講生成的文件路徑設置爲static下才行。

三、效果演示與總結

用我自己的圖片展示一下鉛筆畫的效果,感謝同事芳芳的辛苦訓練!

在這裏插入圖片描述

四、後續計劃

  1. 嘗試訓練其他風格的模型。
  2. 計劃部署在雲服務器上,可以開放頁面給大家來玩。
  3. 如果有時間,考慮學習html5,開發手機版本的演示頁面,更方便大家來玩。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章