在 VSCO中,我們?yōu)槟鷺?gòu)建了個(gè)性化的創(chuàng)意工具、多種功能空間以及社交網(wǎng)絡(luò)的鏈接。除了公開點(diǎn)贊、發(fā)表評(píng)論及查看粉絲數(shù)量等功能外,我們的應(yīng)用還為用戶提供圖像視頻的創(chuàng)建和編輯、發(fā)掘新技巧和新創(chuàng)意,并能夠接入充滿活力的全球社區(qū)。
我們使用機(jī)器學(xué)習(xí)來提供個(gè)性化定制,并為每位用戶的創(chuàng)意流程提供指導(dǎo)。VSCO 為調(diào)整圖片效果而提供了一系列多達(dá) 160 種預(yù)設(shè),甚至還支持膠片相機(jī)的模擬圖像。
未應(yīng)用任何濾鏡的建筑物照片。Sarah Hollander 所攝圖像(左)。應(yīng)用 AU5 預(yù)設(shè)后的建筑物照片(右)。
但在我們的研究中發(fā)現(xiàn),這一系列的預(yù)設(shè)會(huì)讓用戶感到手足無措。因?yàn)樘嗟倪x擇往往會(huì)導(dǎo)致用戶堅(jiān)持使用自己所熟悉和偏愛的少數(shù)預(yù)設(shè),而不會(huì)去嘗試新的預(yù)設(shè)。
解決方案
我們的挑戰(zhàn)是需要為用戶在編輯圖片進(jìn)行創(chuàng)作留有余地的同時(shí),同時(shí)給用戶提供可靠的建議并且鼓勵(lì)他們?nèi)プ孕刑剿?。我們的圖像團(tuán)隊(duì)為了滿足不同種類的圖形而精心提供了多個(gè)預(yù)設(shè),這讓我們能夠?yàn)槊繌堈掌謩e提供個(gè)性化的建議。
為解決上述問題,我們決定借助設(shè)備端機(jī)器的學(xué)習(xí)和采用深度卷積神經(jīng)網(wǎng)絡(luò) (CNN) 模型來為圖像提供預(yù)設(shè)建議。因?yàn)檫@些模型能夠理解圖像中的眾多細(xì)微差別,所以在分類上,相較于傳統(tǒng)的計(jì)算機(jī)視覺算法更為便捷和快速。
基于這種思路,我們開發(fā)出了“照片專用(For This Photo)”功能。該功能使用設(shè)備端的機(jī)器學(xué)習(xí)來識(shí)別所編輯的照片類型進(jìn)而在策劃列表中提供相關(guān)的預(yù)設(shè)建議。“相片專用” 功能深受用戶喜愛,現(xiàn)已成為僅次于“All(用于顯示所有預(yù)設(shè))”的第二大常用功能類。
“相片專用” 功能應(yīng)用視頻
為了讓用戶了解該功能運(yùn)作流程,我們將會(huì)逐一介紹相關(guān)步驟。用戶在使用“照片專用”功能進(jìn)行視圖編輯,當(dāng)加載圖像時(shí),模型會(huì)立即啟動(dòng)推理作業(yè),并為該圖像返回一個(gè)類別。隨后,模型會(huì)將類別 ID 與緩存目錄中的 ID 進(jìn)行匹配,并會(huì)返回一個(gè)與該類別相符的預(yù)設(shè)列表。之后在“照片專用”部分中將顯示六個(gè)預(yù)設(shè)選項(xiàng)供用戶參考,這些預(yù)設(shè)由免費(fèi)預(yù)設(shè)和 VSCO 會(huì)員專屬預(yù)設(shè)組成。通過免費(fèi)和付費(fèi)預(yù)設(shè)的對(duì)比,為用戶提供實(shí)用參考。非會(huì)員用戶在預(yù)覽 VSCO 會(huì)員專屬預(yù)設(shè)之后,便能了解 VSCO 會(huì)員服務(wù)的價(jià)值所在。而會(huì)員所能享受的優(yōu)勢(shì)在于,他們能夠通過會(huì)員服務(wù)了解可采用會(huì)員專屬預(yù)設(shè)的圖像類型。
設(shè)備端機(jī)器學(xué)習(xí)有助確??稍L問性、實(shí)現(xiàn)快速編輯并保護(hù)隱私
研究伊始,我們便已了解基于服務(wù)器的機(jī)器學(xué)習(xí)不適用于此功能。我們希望此功能使用設(shè)備端機(jī)器學(xué)習(xí)主要基于三大原因:設(shè)備端機(jī)器學(xué)習(xí)支持離線編輯、可實(shí)現(xiàn)快速編輯并能保護(hù)隱私。
首先,我們并不希望僅在會(huì)員在線時(shí)才提供此功能,因?yàn)檫@會(huì)限制他們的創(chuàng)造力。靈感可以隨處迸發(fā):人們可能會(huì)在網(wǎng)絡(luò)連接受限的情況下拍攝和編輯照片,例如沙漠中央或是高山之巔。我們的用戶群中有許多人都身處美國(guó)境外,因此并非人人都能隨時(shí)訪問高速網(wǎng)絡(luò)。
其次,我們希望確保實(shí)現(xiàn)快速編輯。若我們采用云端機(jī)器學(xué)習(xí)模型并以此提供“相片專用” 功能,需要上傳用戶圖像并進(jìn)行分類(這會(huì)耗費(fèi)大量時(shí)間、帶寬和流量),而用戶亦需下載預(yù)設(shè);即便網(wǎng)絡(luò)連接狀態(tài)良好,整個(gè)過程亦十分緩慢,如果網(wǎng)絡(luò)不佳,甚至都無法完成。若在設(shè)備端運(yùn)行機(jī)器學(xué)習(xí),則表示全部流程都發(fā)生在本地,運(yùn)行速度快且無需網(wǎng)絡(luò)連接。這對(duì)于確保用戶捕捉精彩瞬間并保持創(chuàng)意至關(guān)重要。
第三,編輯過程不用公開。服務(wù)器端解決方案需要我們讓用戶上傳仍在編輯且未發(fā)布的照片。設(shè)備端機(jī)器學(xué)習(xí)有助于用戶在創(chuàng)作期間保護(hù)他們的隱私。
為什么選擇 TensorFlow
既然我們希望使用自定義模型來開展設(shè)備端機(jī)器學(xué)習(xí),那么 TensorFlow Lite 顯然就是最佳之選。因?yàn)樵摽蚣苣軌蜉p松提取基于服務(wù)器訓(xùn)練的模型,并能使用 TFLiteConverter 將該模型轉(zhuǎn)換為可與手機(jī)兼容的格式(.tflite 格式)。
此外,我們已在服務(wù)器端機(jī)器學(xué)習(xí)生產(chǎn)系統(tǒng)中進(jìn)行驗(yàn)證:TensorFlow 與 TensorFlow Serving 均可成功運(yùn)行。TensorFlow 庫的設(shè)計(jì)是以在生產(chǎn)環(huán)境中運(yùn)行機(jī)器學(xué)習(xí)為首要重點(diǎn),因此我們認(rèn)為 TensorFlow Lite 也不例外。
我們使用 ML Kit(https://developers.google.com/ml-kit) 直接在 TensorFlow Lite 模型上運(yùn)行推理,并將其無縫整合至我們的應(yīng)用中。借此,我們便可將原型中的功能快速引入預(yù)生產(chǎn)環(huán)境。ML Kit 能夠?yàn)槌跏蓟图虞d模型及對(duì)圖像運(yùn)行推理提供更高級(jí)別的 API,這讓我們無需直接處理更低級(jí)別的 TensorFlow Lite C++ 庫,從而能夠大幅加快整個(gè)開發(fā)流程,并能為我們訓(xùn)練模型騰出更多時(shí)間。
VSCO 機(jī)器學(xué)習(xí)堆棧概覽
在機(jī)器學(xué)習(xí)堆棧方面,我們使用 TensorFlow 來對(duì)圖像進(jìn)行深度學(xué)習(xí),并使用 Apache Spark 對(duì)行為數(shù)據(jù)進(jìn)行淺層學(xué)習(xí)。
在生產(chǎn)環(huán)境中,我們有一個(gè)基于云端并使用 TensorFlow Serving 的實(shí)時(shí)推理流水線,該流水線負(fù)責(zé)處理每一張通過各類卷積神經(jīng)網(wǎng)絡(luò)實(shí)時(shí)上傳至 VSCO 的圖像。之后,這些模型的推理結(jié)果會(huì)用于產(chǎn)品中其他功能,如“相關(guān)圖像”、“搜索”、“為您定制”和“發(fā)現(xiàn)”功能等的其他選項(xiàng)卡。對(duì)于設(shè)備端的機(jī)器學(xué)習(xí),我們使用 TensorFlow 生態(tài)系統(tǒng)中適于移動(dòng)端的組件(即 ML Kit 和 TensorFlow Lite)。
相關(guān)圖像
為您定制
搜索
用戶建議
我們還擁有一個(gè)基于 Spark 的推薦引擎,該引擎可使用數(shù)據(jù)存儲(chǔ)中不同來源的大型數(shù)據(jù)集來訓(xùn)練模型,而這些來源包括圖像元數(shù)據(jù)、行為事件和關(guān)系數(shù)據(jù)。之后,我們使用這些模型的結(jié)果來服務(wù)于各種形式的個(gè)性化推薦,如用戶建議。
為支撐機(jī)器學(xué)習(xí)流水線的其他環(huán)節(jié),我們還使用 Elasticsearch實(shí)現(xiàn)搜索和相關(guān)功能,使用 Apache Kafka處理基于日志的分布式數(shù)據(jù)流(此數(shù)據(jù)流亦作為所有機(jī)器學(xué)習(xí)模型的輸入),并使用 Kubernetes部署所有微服務(wù)。我們使用的語言包括 Python、C++、Go、Scala;在對(duì)設(shè)備端進(jìn)行集成時(shí),我們則使用 Java/Kotlin 和 Swift/Object-C。
設(shè)備端機(jī)器學(xué)習(xí):“照片專用”工作原理
第一步:對(duì)圖像進(jìn)行分類
為構(gòu)建能夠提供“照片專用” 功能的模型,我們首先需為圖像分配一個(gè)類別,然后為該類別推薦相應(yīng)的預(yù)設(shè)。下圖描繪了圖像分類過程:
對(duì)圖像進(jìn)行分類
我們從公司內(nèi)部專業(yè)人士所標(biāo)記的圖像數(shù)據(jù)開始入手。這些專業(yè)人士均為攝影專家,能夠掌握用戶行為的第一手資料,因此他們比任何人都更加了解現(xiàn)今分享的內(nèi)容類型以及未來的發(fā)展趨勢(shì)。他們幫助工程團(tuán)隊(duì)構(gòu)想出了適用于模型的多種圖像類別,其中包括藝術(shù)、肖像、活力、海岸、自然、建筑、光影、黑白等。俗話說,機(jī)器學(xué)習(xí) 90% 的工作都是在清理數(shù)據(jù)。這些步驟有助于確保我們擁有基于穩(wěn)定可靠的數(shù)據(jù)來訓(xùn)練模型。
在 TensorFlow 中,我們使用與專業(yè)人士一同創(chuàng)建的分類數(shù)據(jù)集,并基于 SqueezeNet(https://arxiv.org/abs/1602.07360)架構(gòu)訓(xùn)練了一個(gè) CNN 模型。選擇此架構(gòu)是因?yàn)槠涑叽绺?,且?zhǔn)確率更高。通過使用 TFLiteConverter,我們已將訓(xùn)練后的模型從 TensorFlow Saved Model 格式轉(zhuǎn)換為 TensorFlow Lite (.tflite) 格式,以便在 Android 上使用。此階段中發(fā)生了基本錯(cuò)誤,其中一個(gè)原因在于,我們所使用的 TFLiteConverter 版本與 ML Kit 通過 Maven 引用的 TensorFlow Lite 庫版本不相符。ML Kit 團(tuán)隊(duì)幫助我們解決了以上問題,并在我們研究期間發(fā)揮了巨大作用。
在構(gòu)建出可為圖像分配類別的模型后,我們就可以將該模型捆綁至應(yīng)用中,然后搭配使用 ML Kit 對(duì)圖像運(yùn)行xn。由于我們使用的是自定義訓(xùn)練模型,因此我們采用了 ML Kit 中的 Custom Model API。為獲得更高準(zhǔn)確率,我們決定放棄模型轉(zhuǎn)換中的量化步驟,轉(zhuǎn)而使用 ML Kit 中的浮點(diǎn)模型。這其中存在一些挑戰(zhàn),因?yàn)?ML Kit 會(huì)默認(rèn)采用量化模型。不過,我們輕而易舉就成功更改了模型初始化中的一些步驟,從而令其支持浮點(diǎn)模型。
第二步:推薦預(yù)設(shè)
下一項(xiàng)挑戰(zhàn)是基于圖像類別提供預(yù)設(shè)建議。我們與創(chuàng)建預(yù)設(shè)的內(nèi)部圖像團(tuán)隊(duì)進(jìn)行合作,共同構(gòu)想出與各類別圖像相契合的預(yù)設(shè)列表。此過程包括對(duì)分屬各類別的眾多圖像分辨進(jìn)行了嚴(yán)格測(cè)試,以便我們能夠分析出每個(gè)預(yù)設(shè)對(duì)不同顏色的影響。此外,我們還擁有一個(gè)策劃目錄,其中包含了與各類別相對(duì)應(yīng)的預(yù)設(shè)。
為圖像提供預(yù)設(shè)建議
隨著我們?cè)跁?huì)員服務(wù)中不斷添加新預(yù)設(shè),這些策劃目錄亦將逐步更新。為了便于我們隨時(shí)更新這些列表,并讓用戶免于更新應(yīng)用,我們已將這些目錄存儲(chǔ)在服務(wù)器上,并使用 API 對(duì)用戶提供服務(wù)。
該 API 是由 Go 語言編寫的微服務(wù),支持移動(dòng)客戶端定期檢查更新,從而確保擁有最新版目錄。移動(dòng)客戶端可緩存此目錄,并僅在新版目錄推出時(shí)才開始獲取。然而,對(duì)于在首次嘗試此功能之前尚未連接互聯(lián)網(wǎng)的用戶,此方法會(huì)為其帶來“冷啟動(dòng)”問題,即應(yīng)用無法接入 API 并下載這些目錄。我們決定在發(fā)布應(yīng)用時(shí)隨附以上目錄的默認(rèn)版來解決這個(gè)問題。借此,所有用戶便能在任何網(wǎng)絡(luò)連接狀態(tài)下使用該功能,而這也與該功能的初始目標(biāo)相契合。
結(jié)果與結(jié)論
通過“照片專用”功能,現(xiàn)在可以順利地使用預(yù)設(shè)進(jìn)行編輯。我們認(rèn)為,若會(huì)員無法從所獲的新預(yù)設(shè)中發(fā)掘價(jià)值,他們的創(chuàng)意實(shí)現(xiàn)亦將遭遇阻礙。我們不僅希望幫助更多用戶發(fā)掘新預(yù)設(shè),還希望他們關(guān)注與所編輯的圖像最相配的預(yù)設(shè)。
我們將持續(xù)優(yōu)化“照片專用”功能,根據(jù)其他圖像特征和用戶的社區(qū)行為(如關(guān)注、收藏和轉(zhuǎn)發(fā))來提供推薦。此外,我們也希望為此類推薦提供更實(shí)用的背景信息,同時(shí)鼓勵(lì)我們的社區(qū)創(chuàng)作者互相能夠積極發(fā)掘與激勵(lì)。
在暢想此功能未來愿景的同時(shí),我們也在反思。我們意識(shí)到,若沒有 TensorFlow Lite 與 ML Kit,此功能以及 VSCO 的設(shè)備端機(jī)器學(xué)習(xí)能力都將無法實(shí)現(xiàn)。我們樂于未來在此領(lǐng)域繼續(xù)投入更多的人力和物力,并利用該技術(shù)創(chuàng)造更多的功能。
-
圖像處理
+關(guān)注
關(guān)注
27文章
1300瀏覽量
56856 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8438瀏覽量
132989
原文標(biāo)題:為圖像提供預(yù)設(shè)建議:構(gòu)建 VSCO 中的“照片專用”功能
文章出處:【微信號(hào):tensorflowers,微信公眾號(hào):Tensorflowers】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論