手把手教你搭建能夠實現 Prisma 風格遷移效果的 iOS 酷炫應用

2020-12-25 雷鋒網

雷鋒網(公眾號:雷鋒網)按:本文為雷鋒字幕組編譯的技術博客,原標題 Transforming Pictures with Neural Style Transfer in iOS,作者為 Navdeep Singh。

翻譯 | 廖明月  吳桐  蔡雨萌    整理 |  凡江


隨著 2012 年深度神經網絡在 ImageNetchallenge 比賽上以 AlexNet 模型獲勝,深度神經網絡開創了空前的高潮。AI 工程師已經將深度學習技術應用到越來越多的問題域,包括預訓練的深度美國有線電視新聞網模型。還有什麼比創造藝術更富有創造力呢?

一種已經提出並實施的想法,稱為「神經風格轉換」,允許你能夠利用預訓練的深度神經網絡模型,並將某一圖像的風格,例如或梵谷或莫尼特的任何杰作,遷移到另一個圖像,例如你的個人資料圖片或你最喜歡的小狗的圖片,從而創造了一個混合你的圖片內容和名作風格的圖像。

實際上有一個 iOS 應用程式稱為 Prisma,它贏得了 2016 年度最佳應用程式,就是這樣,它在短短幾秒鐘內,可以將你的圖片轉換成你所選擇的任何風格。

在本文中,您將了解如何訓練一個快速的神經風格遷移模型,並在自己的 iOS 上使用,實現 Prisma 可以做到的事情。

快速神經遷移模型的訓練

在這一節中,按照以下步驟學習如何利用 TensorFlow 使用快速神經風格轉移算法來訓練模型:

1. 在你的 Mac 終端或者最好是有著 GPU 驅動的 Ubuntu 上,運行 git clone 命令,複製連結 this Github repo,這是詹森快速風格遷移的一個很好的 TensorFlow 實現的分支,修改後經過訓練的模型允許在 iOS 或 Android 應用程式中使用。

2. 運行 cd 命令 進入快速風格遷移目錄,然後運行 setup.sh 腳本來下載預訓練的 VGG-19 模型文件以及 MS COCO 訓練數據集。

3. 運行以下命令,使用風格圖像 starry_night.jpg 和內容圖像 WW1.jPG,通過訓練創建檢查點文件:

在圖像目錄中還有一些其他風格的圖像,你可以以此用來創建不同的檢查點文件。這裡使用的 starry_night.jpg 風格圖像是梵谷的一幅名畫:

使用梵谷的畫作作為風格圖片

在 NVIDIA GTX 1070 GPU 驅動的 Ubuntu 下整個訓練需要大約五小時,當然在如果在 CPU 上會花更長的時間。

4. 用文本編輯器打開 evaluate.py 文件,並將以下兩行代碼取消批註(第 158 和 159 行):

5. 運行以下命令建立一個新的檢查點,輸入圖像命名為 img_placeholder,轉移後的圖像命名為 preds:

6. 運行以下命令創建一個 TensorFlow 圖文件並載入檢查點中的權重參數,這將創建一個約 6.7MB 的大小 .pb 文件:

7. 假設你已擁有一個 /ft.file 目錄,將生成的 st_frozen.pb 文件複製到 /ft.file 目錄下,直接 cd 進入你的 TensorFlow 原始碼根目錄,如 ~/tensorflow-1.4.0,然後運行以下命令創建為 .pb 文件生成一個量化模型。

這將把固化圖文件的大小從 6.7 MB 縮減到 1.7 MB,它意味著如果你在 App 中為 50 個不同的風格載入了 50 個模型,增加的大小將會是 85 MB。

以上就是利用一張風格圖像和輸入圖像訓練和量化一個快速神經風格遷移模型的全部步驟。你可以在 test_dir 目錄下檢查步驟三中生成的圖像,看一看風格遷移的效果。如果需要的話,你還可以試著玩一玩含超參數的模型,看一看那些不同的,很可能更好的風格遷移效果。代碼文件提供在 https://github.com/jeffxtang/fast-style-transfer/blob/master/docs.md#style 上。

一個重要提示:當你在你的 iOS 或者 Android app 上使用這些模型之前,需要記錄下輸入圖像的精確寬度和高度值作為步驟五中 --in-path 的參數,iOS 或 Android 的代碼將會調用圖像的寬度和高度值(你很快就會看到是如何調用的),否則當你在 App 上運行這些模型的時候將會得到 Conv2DCustomBackpropInput: Size of out_backprop doesn't match computed 的錯誤提示。


在 iOS 系統上添加和測試神經風格遷移模型

第一件事是手動建立 TensorFlow 庫,如果你此前尚未安裝過這個庫。然後執行以下步驟就可以在你的 iOS App 上獲取 TensorFlow 支持和並添加神經風格遷移模型,並試運行你的 App。

  1. 如果你已經擁有了一個添加了 TensorFlow 手冊庫的 iOS app,可以跳過下面這一步。否則,創建一個新的基於 Objective-C 語言的 iOS app,比如可以命名它為 NeuralStyleTransfer,或者在已經存在的 app 中,在 PROJECT 下的 Build Settings 配置中創建一個新的自定義設置,名稱是 TENSORFLOW_ROOT,值為 $HOME/tensorflow-1.4.0,假定上面是你 TensorFlow 1.4.0 的安裝地址。然後在 TARGET 下的 Build Settings 配置中將 Other Linker Flags 設置如下:

然後將 Header Search Paths 設置如下:

2. 將 fst_frozen_quantized.pb 文件和幾個測試所用圖片拖放到你的工程文件夾中,在 https://github.com/PacktPublishing/Intelligent-Mobile-Projects-with-TensorFlow/tree/master/ch4/ios/NeuralStyleTransfer 中的 NeuralStyleTransfer app 文件夾中找到相同的 ios_image_load.mm 和 .h 文件,把它們複製到工程文件夾下。

3. 將 ViewController.m 文件重命名為 ViewController.mm,把它和原 ViewController.h 文件替換為從上面的 GitHub 網址連結獲取中的 ViewController.h 和 .mm 文件。

4. 在 iOS 模擬器中或者你的 iOS 設備中運行 App,你會看到一個狗圖片:

5. 點擊選擇 Fast Style Transfer 選項,過幾秒鐘,你會看到一個帶有 starry night 風格的新圖片。

你可以很簡單的通過選擇你最喜歡的圖片作為風格圖片然後跟隨之前的步驟編譯帶有不同風格的其他模型。然後可以按照這段的步驟在你的 IOSapp 中使用模型。這裡有使用 IOS 的詳細代碼。

使用快速神經遷移模型回顧 iOS 代碼

在 ViewController.mm 中包含許多重要的代碼片斷它在輸入圖片的預處理和轉移圖片的後處理中是獨特的。

1. 兩個常量,wanted_width,wanted_height,作為圖片的高度和寬度定義為相同的值,這裡的圖片就是步驟 5 中的 dog.jpg:

2. iOS 的 dispatch 隊列是用來在 non-UI 線程加載和運行你的快速神經遷移模型並且在風格遷移後圖片生成了,以下為將圖片發送到 UI 線程的代碼:

3. 定義浮點型 3 維張量用於轉換輸入圖片:

4. 發送到 tensorflow Sess->Run 方法中的輸入節點名和輸出節點名與訓練模型的時候是相同的 :

5. 當模型運行完成並且返回輸出張量 (包含 0 到 255 的 RGB 值) 時,你需要調用 tensorToUIImage 通用函數把張量數據轉換為 RGB buffer:

6. 現在,你可以把 buffer 轉化成 UIImage 實例在調整它的大小之前,以下為代碼:

如果你對這個主題感興趣,你可以使用 Jeff Tange 的書來研究更多的深度學習和強化學習 app。這本書包括超過 10 種 iOS,android 和 raspberry pi app 使用 tensorflow 來運行,使用 scratch 進行編譯,離線運行所有絢麗的 tensorflow 模型:從計算機視覺,語音合成到生成對抗網絡和類似於 Alphazero 的深度強化學習模型。

原文連結:https://medium.com/@navdeepsingh_2336/transforming-pictures-with-neural-style-transfer-in-ios-6988b79b34ee

雷鋒網雷鋒網

雷鋒網原創文章,未經授權禁止轉載。詳情見轉載須知。

相關焦點

  • prisma濾鏡
    濾鏡簡介 Prisma濾鏡獲取繪畫大師和主要流派的藝術風格,綜合了人工神經網絡技術和人工智慧技術,把你的照片變成藝術作品,用梵谷、畢卡索、列維坦等藝術家的風格。
  • 手把手教你用OpenCV和Python實現圖像和視頻神經風格遷移(代碼)
    首先說明的一點是,今天討論的方法在一個CPU上可以達到近乎實時的效果,如果在GPU上則完全可以實現實時效果。首先我們會簡單塔倫下什麼是神經風格遷移,以及它是如何運作的。之後我們會用OpenCV和Python動手操作。
  • 用Python快速實現圖片的風格遷移
    先來看下效果:上圖是小編在甘南合作的米拉日巴佛閣外面拍下的一張照片,採用風格遷移技術後的效果為:一些其它效果圖:下面進入正題:近年來,由深度學習所引領的人工智慧(AI)技術浪潮,在這各種神奇的背後,最核心的就是基於深度學習的風格遷移(style transfer)技術。我將在這篇博客帶領大家學習如何使用Python來快速實現圖片的風格遷移。閱讀完本博客後,相信你也能夠創造出漂亮的藝術品。什麼是圖片的風格遷移?
  • 手把手教你,3步快速完成動感效果
    現在出行用手機拍照是最方便不過的了,但是因此手機裡就會留存一大堆照片,既佔內存,又會顯得雜亂無章,翻看照片的時候效果也不夠好。其實把手機照片做成視頻的話,就不會有這些煩惱了。而且現在很多社交平臺上非常流行照片視頻,配上酷炫動感的效果非常吸贊。
  • 神經風格遷移(NST)的基本機制及實現
    深度學習可以捕獲一個圖像的內容並將其與另一個圖像的風格相結合,這種技術稱為神經風格遷移。但是,神經風格遷移是如何運作的呢?在這篇文章中,我們將研究神經風格遷移(NST)的基本機制。神經風格遷移概述我們可以看到,生成的圖像具有內容圖像的內容和風格圖像的風格。可以看出,僅通過重疊圖像不能獲得上述結果。
  • 新Prisma歸來! 那個把照片秒變畢卡索style的app被玩到了更高境界|...
    作者| 周筱琳編輯| 傅博還記得去年很火的圖像處理器prisma嗎?這款App運用雲端計算以及AI人工智慧技術把這項應用套應在prisma上,只需要幾秒中的時間就可以把任何一張單調的生活照變成一幅美輪美奐的藝術作品。
  • 手把手教你搭建微信支付寶聚合支付接口
    現在通過網際網路進行銷售已經越來越普遍了,幾乎每一家企業都會有自己的網站或者APP應用,那麼要在網際網路實現銷售交易必須要解決客戶訂單支付並聯動後臺自動發貨的問題,雖然流程很簡單但是卻困擾了很多小夥伴,畢竟牽涉到支付系統設計與開發,各種支付場景接口實現安全,這可是個不小的工程,所以在這裡介紹一種簡單的私有化聚合支付搭建方案
  • 重磅 Facebook賈揚清宣布新機器學習系統Caffe2Go:可在行動裝置上實現實時風格遷移
    ,很多研究機構和研究者都在努力打造速度更快、計算成本更低的風格遷移機器學習系統,比如《怎麼讓你的照片帶上藝術大師風格?李飛飛團隊開源快速神經網絡風格遷移代碼 》、《谷歌增強型風格遷移新算法:實現基於單個網絡的多種風格實時遷移 》。今天,Facebook 又在其官方博客上宣布了一種可以用在行動裝置實現實時風格的深度學習系統 Caffe2Go,自稱能在眨眼之間完成處理的任務,而且還能實現高質量的視頻風格遷移。Facebook 還表示該項目將會在未來幾個月內進行部分開源。
  • 迷你世界樹屋製作步驟 手把手教你如何搭建樹屋
    迷你世界樹屋製作步驟 手把手教你如何搭建樹屋 迷你世界樹屋製作步驟,這在迷你世界這個遊戲中可以實現
  • 免費攝影APP「Prisma」將照片變成名畫
    2016年07月15日 00:15作者:photoblog編輯:申沛     這個名為「Prisma」的新 App,主要功能就是讓你簡單把照片變成
  • BAIR提出MC-GAN,使用GAN實現字體風格遷移
    選自BAIR作者:Samaneh Azadi機器之心編譯參與:Nurhachu Null、路近日,BAIR 發布博客提出 MC-GAN(Multi-Content GAN),可以快速生成相同風格的字體這個過程需要大量勞動,藝術家們通常只設計標題或注釋所必需的字形子集,這使得設計完成後文本很難更改,或者很難把看到的字體實例遷移到自己的項目中。早期字形合成研究集中在輪廓的幾何建模上,局限於特定的字形拓撲上(例如,不能應用到裝飾字體或者手寫體),並且不能與圖像輸入一起使用。隨著深度神經網絡的興起,研究者研究了從圖像進行字形建模的問題。
  • 手把手教你學Python之手寫數字識別
    問題描述:手寫數字識別是指給定一系列的手寫數字圖片以及對應的數字標籤,構建模型進行學習,目標是對於一張新的手寫數字圖片能夠自動識別出對應的數字
  • 【iOS取證】應用快照
    這些都是看似平常的操作,但今天我們並不是教大家如何使用iPhone,而是從取證的角度來看看這些日常的操作,能給取證工作帶來哪些信息,這就是我們今天要分享的主題—iOS的應用快照。上面兩張圖直觀的體現了應用快照,左圖是任務切換,右圖是應用運行界面。
  • 手把手教你實現液晶電視全屏點對點
    ·請相信它給你帶來的感覺  在你的客廳裡,是否已經有一臺液晶電視,你是否希望將它與客廳電腦連接起來,上網、玩遊戲、看高清視頻……但在進行這些應用之前,請別忘記實現「點對點」,否則將會出現意想不到的「遺憾」,因為在不使用「點對點」顯示時,液晶電視上的字體、圖像將會變得不正常,你將無法看到最佳的顯示效果。
  • 用神經風格遷移生產美圖,你就是下一個梵谷!
    本文就將深入研究神經風格遷移原理,並詳細討論這些技巧。關於NST的介紹這裡就不再贅述了,你可以通過官方PyTorch教程了解NST。不過如同其它介紹性文章一樣,它們的執行結果都較為普通(如下圖)。筆者將展示能提高遷移質量的編碼教程,但是先說一些題外話。
  • 手把手教你——深度學習環境搭建
    但是,只要你打破思維上的自我設限,去學習,去實踐,還是能夠學到一些東西,並且跑一些demo和應用出來的。你要是懶得去扒資料、扒網站,也可以報一家靠譜的培訓機構系統(比如我們雷課),來進行系統的學習。好了,廣告打完了,接下來是大家最喜歡的乾貨環節1. 學習的提前準備(1)部分數學內容的複習,高中數學、概率、線性代數等部分內容。
  • 下載 | 《手把手教你學51單片機-C語言版》
    編輯推薦《手把手教你學51單片機(C語言版)》的創作,目的就是改變當前「51單片機」教學與自學的模式:國內首創「手把手教你學」——集理論知識、視頻教程可以預見,《手把手教你學51單片機(C語言版)》將引領一場單片機教學的革命!作者簡介宋雪松 ,國內知名單片機培訓專家,嵌入式產品技術顧問。擁有近十年產品研發經驗,曾主持研發通信類、虛擬儀器等多款產品,在硬體電路設計和嵌入式軟體設計方向有豐富的項目實戰經驗。
  • 一個工具幫你實現酷炫可視化
    大部分人眼裡,數據可視化可以是這樣的:但其實,它也可以做成這樣:看著酷炫的可視化,有人會疑惑,是否有實實在在的用處。它可以快速製作報表,搭建統一的數據分析和可視化平臺。就因為其強大的數據整合性能,再結合其10多年來成熟的可視化組件,finereport可以製作各類數據可視化大屏。
  • iOS取證之應用快照
    這些都是看似平常的操作,但今天我們並不是教大家如何使用iPhone,而是從取證的角度來看看這些日常的操作,能給取證工作帶來哪些信息,這就是我們今天要分享的主題—iOS的應用快照。下面我們就來看看應用快照的提取和解析。首先我們需要確定其存儲路徑,經過實驗(筆者測試了iPhone X,iOS13.3.1和iPhone 6,iOS12.4.4)發現應用快照的存儲路徑位於應用程式沙盒中的Library文件夾下,12.4.4版本和13.3.1版本的存儲路徑略微有差別,這也導致同樣的提取方式,不同的效果。
  • 手把手教你從0到1搭建AB測試系統
    最近一段時間在負責公司內部AB測試系統從0到1的搭建,在實現中踩了很多坑,也做了很多競品分析了解國內外的競品通用做法。藉此機會總結下這段時間的經驗並分享給大家,希望能讓看到這篇文章的人少走彎路。之所以命名這個題目是因為我小學的時候曾學過一篇文章叫《手把手教你從0-1搭建傳奇私服》,一不小心就暴露了年齡哈哈哈,跟著教程確實搭建成功並且還有附近的人進入遊戲,可是當時自己的電腦作為伺服器的性能太差,運營一天就關閉了,傷感。分析大多是從產品經理需要了解的寬度和深度來描述,具體的技術不會涉及很多。