作者:楚豐,仝輝
摘要
前面兩篇文章中,閒魚作為阿里巴巴代表,分別揭曉了“UI2CODE”及“Flutter”在2018谷歌開發者大會上的奧祕,本篇文章我們將分享閒魚在TensorFlow領域的分享和心得。
在9月21日結束的Google開發者大會上,閒魚團隊作為Google的合作伙伴參加了此次會議,不僅在Flutter方面與谷歌以及國內開發者進行了深度交流,同時閒魚技術開發專家陳永新作為本次大會的演講嘉賓,分享了閒魚基於TensorFlow Lite的端計算應用實踐。在閒魚的展臺上還展示了閒魚基於TensorFlow的黑科技:UI2Code,吸引了絡繹不絕的開發者前來圍觀。
TensorFlow 趨勢
TensorFlow自2015年釋出以來,已經成為世界上使用最廣泛的機器學習框架,滿足了廣大的使用者和用例需求。在此期間,TensorFlow隨著計算硬體、機器學習研究和商業部署的快速發展而得到進步。
為了反映這些快速變化,本次的谷歌開發者大會介紹了TensorFlow和lite的一些新特性,重點關注易用性。以下是TensorFlow的新特性:
1.Eager execution,動態圖機制,允許直接執行圖,將更方便除錯。
也將會是未來TensorFlow 2.0版本的預設開啟選項。它將使用者對程式設計模型的期望與TensorFlow更好地結合起來,並且使TensorFlow更易於學習和應用。
2.通過交換格式的標準化和API的一致性,支援更多平臺和語言,並改善這些元件之間的相容性和奇偶性。
3.將刪除已棄用的API並減少重複數量,避免給使用者造成混淆。
4.TensorFlow Lite轉換工具新增post-training模型量化(post-training quantization)。
對於相關的機器學習模型,這可以實現最多4倍的壓縮和3倍的執行速度提升。此外,模型主要由卷積層組成,執行速度提高10-50%的同時減少了記憶體和計算需求,預計大多數模型的功耗也會降低。
5.TensorFlow Lite從contribute目錄移動到主目錄,正式加入TensorFlow主工程。
TensorFlow Lite在閒魚客戶端上的應用
閒魚客戶端如何應用TensorFlow Lite
閒魚自研了一個基於TensorFlow Lite的框架,主要對三方面進行了定製:擴充性、安全性和動態化。
1.擴充性:
在擴充性方面利用TensorFlow Lite的自定義OP,將我們所需的一些資料預處理等作為一個自定義OP,整合到同一個模型,這樣可以一個業務就是一個模型,能夠做到業務之間保持獨立。
2. 安全性:
通過自定義的加密頭等方式,將模型進行加密,在客戶端執行該模型時,動態解析出原始模型,做到資料不落盤,最大程度保證了資料安全。
3. 動態化:
通過服務端動態下發模型和OP的方式,實現了線上更新模型和演算法,極大地方便了灰度測試、演算法升級等需求。
應用一:視訊封面
在視訊封面這個案例中,利用TensorFlow Lite,可以將原先傳統演算法做的事,在端上用用AI模型來完成。傳統基於規則的做法,選取視訊封面的時候,是由演算法同學設計一個基礎演算法,同時再處理各種Case,最終選取一張封面。對於遺漏忘處理的情況,則需要發版更新演算法,維護成本太高。 而使用AI模型,則可以通過動態下發模型和OP的方式隨時灰度和升級。
應用二:視訊指紋
在這個案例中,展示了一種對 TensorFlow Lite 較“另類”的用法:將它當做一個計算框架。TensorFlow Lite 本身就是一種計算流程的框架,因此,可以利用它支援自定義OP的特性,將我們演算法的各個環節作為一個個自定義OP,然後利用模型將這些計算環節“串聯”起來,這樣,整個TensorFlow Lite就儼然成為了一個天然的端計算框架。這樣既可以對單個計算環節(自定義OP)做更新,還能隨時調整整個計算流程(即調整模型)。
應用三:智慧租房
最後這個案例是比較傳統的TensorFlow Lite的用法,使用了較流行的SSD模型,在租房環節,通過自能識別圖片中的傢俱(冰箱、電視等),以此自動地給使用者釋出的房屋打上標籤,不僅簡化了使用者操作,還豐富了商品資訊,為後臺資料搜尋推薦等提供了更有效的資訊。
TensorFlow 在閒魚工程效率上的應用
UI2Code
關於UI2Code的介紹,可以參考前面的一篇文章《Google開發者大會將揭曉哪些黑科技》。
該專案展示的是從一張圖片,直接生成UI程式碼的過程。該圖片可以是設計師的視覺產出,也可以是手機上隨便開啟一個軟體然後截圖得到。 這裡針對大家關心最多的幾個問題做一下說明:
1.“UI2Code”和微軟剛剛開源的“Sketch2Code”有什麼區別
Sketc2Code 關注的是如何快速的將設計師的靈感,變成“近似”的UI程式碼,可以理解成是給設計師用的創作工具,生成的程式碼也並不是為了直接作為線上程式碼使用。
而我們的 UI2Code 關注的是1比1畫素級別的“精確”還原,目的是為了節省開發人員重複機械的視覺還原工作,將沒有創造性的重複性工作交給機器,這樣開發人員就可以去關注更重要的邏輯性問題。它生成的UI程式碼是“接近”生產可用的,開發人員只要做一些資料繫結或者細微的調整即可。
2.“UI2Code”是如何使用TensorFlow的?
實際上該專案是一個複雜的工作流程,在流程的某些節點上,我們使用TensorFlow來完成深度學習任務。比如,由於輸入是一張純圖片,並無其它任何資訊,因此,需要用深度學習來“理解”圖片內容,包括哪些是文字,哪些是圖片等等。
3.你們這個有對外提供服務嗎?是否有開源計劃?
目前該工具還只是閒魚內部使用(實際上我們的團隊已經用它有一段時間了,上線了多個導購頁面),下半年會開始考慮開源計劃。由於該工具裡面有部分我們自有業務的東西,同時公司有嚴格的開源稽核和披露的流程,因此還需要一段時間,大家可以關注我們的公眾號:閒魚技術,到時候有了進一步的訊息會第一時間在上面公佈。
結語
本次大會閒魚作為Google的合作伙伴,與廣大開發者分享和交流了閒魚在Flutter和TensorFlow等方向上的實踐,我們希望同廣大開發者一起,在技術的道路上,不斷探索創新,用技術推動業務。當然我們也對人才求賢若渴,如果你也希望做一些很“酷”的事情,歡迎加入閒魚!
簡歷投遞:guicai.gxy@alibaba-inc.com