天天看點

不寫一行代碼,完成機器視覺算法的研發

什麼是xNN雲平台

近年來,以深度學習為代表的AI算法在計算機視覺、自然語言處理、語音等衆多領域都取得了突破性的技術進展與愈來愈令人信服的落地應用。随着軟硬體生态的不斷完善,深度學習的神秘感也在逐漸降低——“10行代碼完成訓練”、“30分鐘入門而不放棄”、甚至于“AI從娃娃抓起”都不再是天方夜譚。

不寫一行代碼,完成機器視覺算法的研發

然而,在商業場景中将算法與資料轉換為實實在在的生産力,要遠遠比跑一個demo 要複雜而嚴肅得多。資料工程、算法選型、模型調參、技術名額收斂、工程部署、線上疊代,還包括幕後的軟硬體環境的準備與維護、預算管理,這些環節中的任何一個都能直接影響到整個項目的成敗,同時也都離不開專家級的經驗才能夠真正做好。然而,專家級的算法、工程和資料工程師一定是稀缺的,項目依賴于專家的深度參與即意味着高昂的研發成本——即使對于技術儲備算得上深厚的阿裡經濟體來說,目前我們也隻看到了深度學習技術的點狀應用,而遠遠談不上全面落地。

xNN 引擎是螞蟻金服提升AI研發效率的努力之一。自2017年8月上線以來,xNN在模型性能、模型尺寸等技術名額的收斂、以及提供穩定易用的工程部署能力方面都取得了一定的成果。

到目前,在支付寶 App 端已經面向近20個業務,落地了30多個模型,同時也輸出到集團内多個兄弟App,并在各種IoT裝置中得到了應用。剛剛結束的2019年春節支付寶五福活動中,運作在使用者手機端側的 xNN 在10天内完成了數千億次前向調用,AR 掃福字的服務端算法也首次運作在xNN 的雲側版本上,實作了一套模型橫跨端與雲的統一。然而,在整個研發鍊路的其他環節,包括資料、算法、模型,目前仍然以領域專家手寫代碼的方式來完成,因而有着高昂的成本與門檻。

xNN 雲平台是我們在計算機視覺領域針對以上問題的解決方案。雲平台面向普通的研發、品質、UED(沒錯,已經有UED同學在使用了!)、營運等等非算法專業的同學,也面向視覺與非視覺領域的算法同學,提供全自動的模型訓練與模型壓縮能力。

同時配合專業的資料管理、資料标注(感謝螞蟻AlphaQ!)、模型評測、端側釋出、雲側釋出、資料監控等全套工程能力,使得使用者能夠在不寫一行代碼的情況下完成計算機視覺算法從資料準備到釋出的研發全流程。我們衷心希望雲平台能夠像xNN 一樣,進一步降低算法門檻、提升算法深度,為深度學習與計算機視覺算法在阿裡經濟體的全面落地作出貢獻!

三步完成模型研發

Step 1:資料采集+标注

根據自己的業務場景,采集一些圖檔作為訓練樣本,少的幾十張,多的幾萬張,都可以(當然,有些場景下樣本數量太少會影響識别效果)。然後花些時間對圖檔内容标注一下,也可以發動你的小夥伴,或者申請些預算求助于外包同學,動動手指,用人工的智能,幫助人工智能學習這些圖檔。

Step 2:一鍵訓練

這一步就是使用标注好的圖檔,從xNN 雲平台的算法倉庫中選擇一個合适的算法,建立你的訓練任務。接下來可以喝杯咖啡,幾十分鐘或幾個小時之後,你會收到一個釘釘通知,代表訓練已經完成,可以來收貨了。

Step 3:評測+釋出

訓練完成後,你最想要知道的就是模型好不好用,效果怎麼樣。想要直覺地體驗一下,可以下載下傳官方提供的移動雲平台用戶端,就可以實時體驗這個模型的識别效果了。感性的體驗之後,可以使用模型評測功能,對模型識别效果進行定量的分析和判定,橫向比較各個模型的名額參數。如果決定模型可以用于線上業務,可一鍵将模型釋出到手機用戶端或者雲伺服器上,并提供線上的預測服務。

不寫一行代碼,完成機器視覺算法的研發

案例展示

xNN 雲平台釋出後,已有10+個業務場景接入使用,感謝xNN 雲平台的使用者對xNN 雲平台的支援。這裡有一些有代表性的案例,在這裡與大家分享一下。

最高效

阿裡巴巴某汽車團隊的同學,從開始使用xNN 雲平台,到訓練出第一個模型,僅僅花費了2個小時。通過收集不同方位的車的資訊,訓練出一個分類模型,可以判斷出車的方位資訊。同時,我們統計了10+個業務場景首次訓練的時間成本,通過xNN 雲平台訓練模型,平均隻需1天時間,即可訓練出第一個模型。

不寫一行代碼,完成機器視覺算法的研發

最勤奮

螞蟻金服某内容團隊的同學,是在xNN 雲平台完成訓練次數最多的使用者,從開始使用到現在的1個月時間裡,累計上傳圖檔34萬張,累計訓練模型12個,平均每2天就會有一個新的模型問世。這些模型被應用于支付寶的産品中,模型會對所有的支付寶頭像圖檔進行分析,篩選和過濾出含有敏感資訊的圖檔,進而保障對使用者透出的是合規的圖檔。

最跨界

螞蟻金服某設計團隊的同學,作為設計領域的高手,遇到圖像識别方面的需求,之前必須要尋求算法同學的支援,才可以訓練出一個模型,時間成本和溝通成本都比較高。現在完全可以根據自己的想法,輕松完成模型訓練。目前的使用場景是檢測圖檔中的二維碼,通過對1000張圖檔的标注,就可以訓練出一個二維碼的檢測器了。

不寫一行代碼,完成機器視覺算法的研發

實戰中不斷成長

衡量一個模型的好壞,需要從多個次元去評判。模型需要同時兼顧識别精度、運算速度、模型尺寸,一個環節出問題,就會導緻模型無法使用。比如精度不夠會影響業務識别效果;運算太慢會影響使用者體驗,浪費更多的計算資源;模型尺寸太大則會浪費使用者的流量,并且對模型下載下傳的成功率産生影響。xNN雲平台目前已經可以提供出各方面表現都符合線上業務要求的模型,并在多個業務中不斷打磨優化。

端化能力打磨

以訓練識花模型為例,xNN 雲平台優化版的模型,在識别精度無損的情況下,模型尺寸為原始的1/4,計算速度提升30%;如果你對運作速度和包大小有更高的要求,xNN 雲平台高速版本可以在略微降低精度的前提下,模型尺寸為原始的1/10,計算速度提升90%(具體資料參見下方表格)。當然,如果你對某些名額有更高的要求,可以在xNN 雲平台的基礎之上,對算法進行進一步的優化。

不寫一行代碼,完成機器視覺算法的研發

業務經驗積累

現在越來越多的業務場景需要圖像識别的技術,支付寶内目前已有20餘個業務在使用機器視覺團隊提供的算法能力,甚至像支付寶的春節活動,也是通過這樣的方式來完成。在這些業務場景中,我們将業務流程中的關鍵節點和容易踩坑的環節進行抽象和封裝,內建到xNN 雲平台中,讓大家少走彎路,将更多的精力用于優化自己的業務體驗。

同時,經過多個業務場景的不斷嘗試和調整,xNN雲平台從精度、計算耗時、模型尺寸等多個名額,篩選出綜合能力最好的模型,供大家使用和體驗,這些模型已經被應用于線上多個業務場景中,可滿足大部分業務場景的要求。

平台架構

不寫一行代碼,完成機器視覺算法的研發

資料标注

人工标注:xNN 雲平台使用了 AlphaQ 平台的标注能力,可支援分類、檢測、分割等多場景的标注,同時會對标注任務進行分解,支援多人同時标注。

算法标注:可使用模型倉庫中的模型對圖檔進行預标注,人工标注隻需做增量調整,降低人工标注的成本。

不寫一行代碼,完成機器視覺算法的研發

模型訓練

訓練排程:xNN 雲平台的訓練任務,通過 ALPS 運作在yarn 叢集上。xNN雲平台将每個訓練任務拆解為PREPARE、SEARCH、TRAIN、SUMMRY四個階段,根據各個階段的功能,配置設定不同的計算資源和存儲資源,最大化利用已有的計算能力。

超參搜尋:訓練過程會進行多次的超參搜尋和訓練,利用有效的超參搜尋算法,降低計算量的同時,訓練出效果更好的模型。

端化處理

模型壓縮:內建自研的 xqueeze 模型壓縮算法,内置的剪枝、量化、編碼等技術,提供了十倍以上模型壓縮能力,定點化算法更能縮減一半的推理耗時。

模型加密:所有 xNN 雲平台産出的模型具備模型加密屬性及自我校驗能力,有效提高模型安全性及隐私性,防止模型資訊洩露及被惡意篡改帶來的風險。

模型表現

手機預覽:訓練出模型之後,安裝移動雲平台用戶端,無需自己搭模組化型的運作環境,手機掃碼即可實時體驗模型效果。

模型評測:針對同一個任務訓練出多個模型之後,可以橫向比較各個模型的名額參數,為決策是否進行模型更新提供指導資料。

雲測平台真機實驗:不同的網絡結構運作在真機上的性能是不同的,通過接入雲測平台,在100+真機上進行模型的實測,提供具有參考價值的性能名額。

不寫一行代碼,完成機器視覺算法的研發

模型釋出

用戶端釋出:接入支付寶用戶端釋出平台,具備多種粒度的灰階和釋出能力。

服務端釋出:依托于 xNN-x86 引擎,真正做到統一模型的端雲一體化部署。将模型推送至雲端系統進行推理計算,釋出過程可灰階、可監控、可復原。

線上監控

性能名額:通過用戶端的埋點資料和服務端的日志采集,監控模型線上上運作的性能名額資料。

資料回流:對于線上處理的圖檔,按比例回流到 xNN 雲平台,用于線上識别效果分析和疊代訓練的新增樣本。

平台沉澱

算法倉庫:沉澱由 xNN 雲平台官方提供的分類算法、檢測算法、OCR 算法等,以及由使用者貢獻的優秀算法。

資料倉庫:沉澱每次訓練過程所需要的已标注的圖檔,對于高品質且非敏感的資料,可共享給所有平台使用者使用。

模型倉庫:沉澱所有通過 xNN 雲平台訓練出的模型,對于使用場景廣泛且效果效果優異的模型,共享給所有平台使用者使用。

算法架構

不寫一行代碼,完成機器視覺算法的研發
  • 內建自研的 xqueeze 算法,提供強大的模型壓縮、推理提速、模型編碼與加密等能力;
  • 抽象通用的底層定義,包含構模組化型圖 Model、排程機制 Schedule、超參搜尋政策 Strategy。以及下沉上層複用的能力,包含模型評測方法 Metrics、常用網絡骨幹 Nets、平台讀寫操作 IO Utils;
  • 實作接口方法,包含實作模型圖中的網絡結構 Customize Model、實作(資料預處理/超參搜尋/模型訓練/資料彙總/模型評測)的具體操作、實作具體的超參搜尋方法;為了滿足使用者自定義網絡結構等需求,我們也把本層的自定義能力,開放了出來,具體可參見【算法開放能力】小節。
  • 透出支援的算法應用場景,包含圖像内容分類、目标物體檢測、光學文字識别。

對于一次雲平台的訓練任務,背後的排程可分為四個階段:PREPARE(資料預處理)、SEARCH(超參搜尋)、TRAIN(網絡訓練)、SUMMARY(模型轉換及壓縮,結果歸納)。任務執行一次PREPARE 子任務,用于資料預處理、格式轉換、生成tfrecords 等;對于同時的多個SEARCH 子任務,背景機制會保證SEARCH 任務的串行執行,防止超參的重複搜尋;對于同時的多個train子任務,會被配置設定到不同的實體資源上執行,支援各訓練的并發執行,盡可能地提高GPU 資源的利用效率;當被搜尋的超參空間滿足結束條件時,系統觸發SUMMARY 子任務,用于xNN模型轉換、加密、必要資料備份等。這4個步驟調用時間線如下圖所示:

不寫一行代碼,完成機器視覺算法的研發

算法開放能力

平台提供了在不同應用場景下的優秀算法實踐,進而盡可能地減少了使用者在算法側的負擔,選擇使用平台預設提供的算法,即可得到較優的模型。然而不同場景的資料千差萬别,通用的算法包也可能難以面面俱到。此時,使用者可以借助我們的算法API開放能力,去主動調整訓練參數、自主設計網絡結構,甚至還可以完全開發一套新的算法場景。我們依據開發的時間成本,将接入算法API的模式依次分為三種:參數配置模式、模型定義模式、階段定義模式。使用者可以根據自身需求,選擇相應模式進行算法開發。

參數配置模式(推薦指數★★★★★):

不寫一行代碼,完成機器視覺算法的研發

使用者建立任務選擇相應算法包後,平台會透出進階配置選項,提供算法參數配置能力。可以配置但不僅限于模型網絡參數、減枝力度、量化階數等。此模式接入成本為零,可以配置的參數由兩部分組成:

  • 算法透出可配置參數:不同的算法包,對外透出的可配置參數可能不同,由算法包提供者對外暴露。如平台提供的分類算法包,對外透出了 input_size, dept_multiplier, batch_size, num_epochs 等參數。
  • 平台固有可配置參數:平台側已經實作網絡結構減枝、量化、移動端轉換等通用能力,這部分通用能力的參數也可以被使用者配置,如減枝模式(prune_mode)、量化模式(quant_mode)、TOCO 轉換配置參數等。

Tips:所有遵行平台開發規範的算法包,都會自動具有該配置項。

模型定義模式(推薦指數★★★★):

不寫一行代碼,完成機器視覺算法的研發

如果除了參數配置外,使用者還希望自主定義網絡結構,那麼通過模型定義模式接入,即基于平台已有的開放算法包做二次開發。使用者僅僅需要實作幾個核心方法(網絡結構定義,優化算法,loss定義),就能快速地完成對算法包的主幹網絡和優化方法的替換。這種模式下,使用者無需關心分類、檢測、OCR 場景的資料如何預處理,也無需關心模型如何實作壓縮、量量、xNN模型轉換,使用者隻需要關注網絡結構本身即可。具體而言,使用者可選擇自定義實作如下三個部分:network(必選)、input_fn(可選)、hooks(可選)。

不寫一行代碼,完成機器視覺算法的研發

network (必選)a. build_model: 函數的入參,是平台基于不同類型場景已預處理妥善的 features、 labels、is_training 等參數,使用者直接基于上述變量,構造自己的網絡結構即可b. get_train: 定義網絡優化方法, 如 RMSPropOptimizer、MomentumOptimizer、AdamOptimizer 等。c. get_loss: 擷取自定義的 loss,用于訓練階段梯度回傳,以及模型擇優比較。

input_fn (可選):模型在訓練、測試、預測階段的輸入資料解析、線上擴增、輸入節點定義等,可以分别利用 train_input_fn、eval_input_fn、inference_input_fn 進行添加。

hooks (可選)模型:訓練、測試、預測階段的一些前處理、後處理操作,如自定義名額的計算、預訓練模型的加載等,可以分别利用 get_training_hooks 、get_evaluation_hooks 、get_prediction_hooks 進行添加。

階段定義模式(推薦指數★★★):

不寫一行代碼,完成機器視覺算法的研發

如果使用者希望自定義地更多,滲入到算法各個階段,比如希望借助平台的模型壓縮、端化能力來搭建自己的算法場景,那麼使用者可以選擇階段定義模式。平台上所有算法包均基于xnncloud-common 基礎包實作,封裝了模型減枝、參數量化、模型轉換加密等通用功能,并抽象出必要的算法排程階段,包括資料預處理(PREPARE)、參數搜尋(SEARCH)、模型訓練(TRAIN)、結果彙總(SUMMARY)、模型評價(EVALUATION),來供使用者自定義實作。

資料預處理 (必選):實作資料離線擴增、資料集的劃分、資料特征提取等過程。

參數搜尋 (可選):預設采用grid search政策,使用者也可以實作自定義的參數搜尋政策,來指導超參搜尋過程。

模型訓練 (可選):預設會根據使用者自定義的網絡結構、loss、train_op,自動完成模型訓練與壓縮過程。

結果彙總 (可選):定義評價最優模型的名額(預設采用 loss),選擇 top K 模型,并完成 xNN 模型轉換、上傳模型等結果儲存操作。

模型評價 (必選):基于訓練得到的pb檔案,計算模型在測試資料集上的預測結果,并計算性能名額。

不寫一行代碼,完成機器視覺算法的研發

原文連結:

https://mp.weixin.qq.com/s/1GL56Ze0RP7BlufD_KijAA

繼續閱讀