2018年9月29日 星期六

快速畫風移轉: 你的圖片/相片/影片, 以名畫家的動漫風格重現!

兩年前的此時, 畫風轉移魔法引發熱烈討論。 我有自己架起來玩過, 很好玩, 但光是轉一張圖就要好幾個小時。 這兩年來, 不斷有人提出改良版的演算法。 目前最佳的版本稱為 fast style transfer, 如果不計算預先訓練畫風的時間, 只計算轉移的時間, 速度超快。 即使是在我的 2014 年老電腦上只用 CPU (Intel Pentium G2030 @ 3.00GHz) 也能處理影片。 下圖每塊 212x120 的 13 秒影片各約耗時 3.5 到 4 分鐘。

  1. 我們將以 ~/fst 為工作目錄。 把圖片跟影片放在 ~/fst/media/
  2. 這個 gist 抓回我寫的 transform_iv.py (改寫自原作者的 transform_video.py)。
  3. 抓回 我製作的 (cpu 版的) FST dockerdocker pull ckhung/fast-style-transfer:18C-ffmpeg (請查看 「tags」 看有沒有更新的版本)
  4. 下載已訓練好的畫家藝術頭腦模型, 共有 la_muse scream udnie rain_princess wave wreck 等六種畫風: cd ~/fst ; wget http://fs.cyut.edu.tw/gregslab/fast-style-transfer-models.tgz ; tar xzf fast-style-transfer-models.tgz 檔案來自原作者的 google drive , 請見 github 的 「Evaluating Style Transfer Networks」 那一節的連結 「located here」。
  5. 啟動: docker run -it --name fst -v ~/fst:/ext ckhung/fast-style-transfer:18C-ffmpeg bash
  6. 在 docker 裡面, 確認你的工作目錄是 /root/fst , 裡面有 evaluate.py 等等程式碼。 把我寫的程式拷貝回工作目錄: cp /ext/transform_iv.py .
  7. 對圖片施展魔法: time python transform_iv.py --checkpoint /ext/models/udnie.ckpt --outdir /ext/output/udnie/ /ext/media/*.jpg 這會把 /ext/media/ 底下的所有 jpg 檔以 "udnie" 畫風畫出來, 放在 /ext/output/udnie/ 底下。
  8. 處理 .mp4 影片也是一樣的指令, 只是比較久。 建議先把影片縮成長寬在 200 或 300 以內。 命令列若加上 --batch-size 4 選項, 小批次處理, 速度可能會快一些。
  9. 若要像我一樣把轉換前後的影片並列, 請見 影片裁剪合併/放大縮小/快轉慢播的萬用工具 ffmpeg

哇, 這個拿來做影片後製、 在什麼公眾場合放一下, 蠻炫的耶...

若想自己 build docker, 第二步那個 gist 連結裡有 Dockerfile 可參考。 如果只需要處理圖片不需要處理影片, 用 fst.Dockerfile 即可。 如果需要處理影片, 就要用 fst-ffmpeg.Dockerfile 。 因為它用的 tensorflow 版本有點舊, 系統是 ubuntu 14.04, 所以 安裝 ffmpeg 有點麻煩。 而且如果用來跑 docker 的那部 host 其實是 proxmox (大房東) 裡的 lxc (二房東), 那麼有可能會出現 系統效能被 rsyslog 拖垮的問題, 需要修改 proxmox 的 /etc/rsyslog.conf 設定。

沒有留言:

張貼留言