「回顧」如何打造一流的視覺AI技術?


「回顧」如何打造一流的視覺AI技術?



分享嘉賓:鄧亞峰 格靈深瞳 CTO內容來源:AI先行者大會《如何打造一流的視覺AI技術》出品社區:DataFun注:歡迎轉載,轉載請註明出處。


本次分享主要分以下幾個部分:首先簡要介紹一下計算機視覺技術的相關背景,然後結合格靈深瞳的實踐,從算法研發、訓練平臺、智能數據處理、異構計算等幾個方面著重介紹如何打造一流的視覺AI技術,最後介紹格靈深瞳在相關技術落地方面的情況。

1、計算機視覺及其相關技術

1.1 計算機視覺概述

計算機視覺作為人工智能領域最重要的技術方向之一,其基礎

機器學習算法,而深度學習算法無疑是當前最受歡迎的機器學習算法。隨著計算機算力的不斷增強,海量數據的增長,深度學習算法的提出使得用更大量數據訓練更深的網絡成為可能,在限定的場景下,一些圖像識別算法的準確率已經超越了人類。從應用角度,我們正處於計算機視覺應用爆炸性增長的智能時代,包括移動互聯網、自動駕駛、智慧城市、智慧醫療、機器人、增強現實、智慧工業等在內的多個方向,都取得了非常多的進步。從另外一個視角看,計算機視覺是對物理世界的數字化,是智慧物聯網時代最大入口,和大數據技術結合擁有非常廣闊的應用場景。

1.2 計算機視覺技術願景


「回顧」如何打造一流的視覺AI技術?



計算機視覺技術從廣義上講是讓計算機看懂世界,狹義上講就是通過豐富的視覺傳感器,理解物理世界中每個物體的位置、屬性、身份以及行為等信息。

計算機視覺技術從算法方面期待:

·功能更加豐富:感知方面從位置檢測、屬性識別、身份識別,逐步向行為識別和關係識別(不同物體間的關係)發展;

·目標類別更全:分析目標從人臉、人體、車輛,拓展到商品,再拓展到其它物體;

·理解粒度更細:從理解圖像中包含什麼物體的分類任務,到理解物體在圖中的具體位置和數目的檢測任務,進一步到理解物體的部件以及關鍵點位置的關鍵點定位技術,更進一步到理解每個像素所屬類別的語義分割任務。

計算機視覺技術從產品性能角度則期待:

精度更高、速度更快、成本更低、支持規模更大、功能更豐富。

2、如何打造一流的視覺AI技術

2.1 構建計算機視覺系統的基本流程


「回顧」如何打造一流的視覺AI技術?



對於一個視覺應用系統而言,需要先將應用系統劃分為不同的子模塊,比如人臉識別系統,就包括人臉檢測、特徵點定位、人臉識別等不同子模塊。對於每一個子模塊,都由輸入輸出定義、數據收集、數據標註,訓練框架選擇,算法實現,模型訓練,模型選擇,模型上線等不同步驟組成。

2.2 構建視覺計算系統的關鍵因素


「回顧」如何打造一流的視覺AI技術?



構建計算機視覺計算系統主要包含下面幾個關鍵因素:

·核心算法研發:即如何開發出更準確、更快、更多功能的算法;

·自動化大規模訓練框架:即如何支持更大規模集群,更加自動化地訓練算法;

·智能數據挖掘和標註:即如何做到高效的數據挖掘和低成本的標註;

·基於硬件平臺的計算優化:即如何選擇硬件平臺,以及在硬件平臺上做性能優化。

2.2.1 核心算法研發


「回顧」如何打造一流的視覺AI技術?


算法研發是一個不斷迭代、精心打磨的過程,工業界和學術界最大的區別是學術界希望創造更多的算法,追求更多的是新穎性和創造性,而工業界追求的是系統的功能、性能、穩定性指標,並不要求發明最新穎的算法,而是要依據業務需求和資源限制做出最好用的系統。在工業界進行算法改進,包括很多維度,如數據如何處理、數據規模和來源,參數設置、模型結構,還包括損失函數設計,模型加速算法等,每一個因素都可能對最終結果影響很大。還有非常重要的一點是,需要從系統角度去解決問題,比如設計新的系統處理流程,比如把問題定義為檢測問題還是識別問題。


「回顧」如何打造一流的視覺AI技術?


人臉識別損失函數演進

以人臉識別算法為例,由於我們無法訓練一個能分類世界上所有人的分類模型,所以人臉識別最終是希望訓練一個將人臉圖像轉換為表示能力非常強的特徵模型,這裡面非常核心的是損失函數的設計。最早的人臉識別算法是採用了softmax損失函數,但softmax損失函數的缺陷是當類別數非常大時參數規模非常大,並且,要求每個人的樣本數比較均衡,且不能太少,很多時候無法滿足。後來出現了pair-wise形式的損失函數,這個損失函數將分類轉換為兩類問題,即同一個人以及不同人兩類,希望同一個人兩張圖片之間的距離儘可能小,而不同人兩張圖片之間的距離儘可能大,從而不會有類別太多的參數規模問題,且不對樣本數目有太多要求。後來還出現了Triplet 損失函數形式,要求同一個人圖片之間的距離小於不同人圖片之間的距離。但是pair-wise和triplet損失函數的缺陷是容易受數據噪聲影響,比較難訓練,收斂也比較慢。後來大家又發現,將softmax形式做改進可以取得很好的效果,包括對特徵的歸一化、權重矩陣的歸一化以及加margin等。所以,我們看到僅僅是人臉識別損失函數這樣一個技術點,就包含了非常多的選擇和迭代。在工業界,想真正做好一個算法模型,就都需要跟蹤很多工作,同時由於論文裡的很多結論在大規模實際數據情況下,和論文中的結果可能會不同,所以需要結合實際數據和場景進行一一驗證。這要求我們在工業界真正想做一流的算法,不僅僅要求我們可以正確理解論文中的算法思路,還要求能夠在工業界的數據規模下正確實現,並設置正確的參數和訓練技巧,同時還需要結合實際情況去改進。


「回顧」如何打造一流的視覺AI技術?



對於人臉識別系統而言,損失函數是影響人臉模型表示的一個因素。除此之外還包括訓練數據的數據量、純度和數據分佈,數據增強的方式,比如收集的數據往往數據質量比較高,為了使得模型在低分辨率數據上有好的效果,需要在訓練過程加入相應的擾動。除此之外,人臉識別的前序模塊,比如人臉檢測和特徵點定位的精度也會影響識別效果。還有包括如何利用模型蒸餾等方法進行速度提升,如何利用人臉的多個部件融合進行效果提升,在視頻中,如何通過人臉質量屬性選擇最優的人臉進行識別,如何融合多幀圖像進行處理等。對於一個人臉識別系統而言,上述的每一個因素都會影響最終的系統效率和用戶體驗,每一點都需要精細打磨。


「回顧」如何打造一流的視覺AI技術?



每一個智能系統都是由多個智能算法模型組成的,以我們針對智慧城市、智慧商業領域研發的智能視頻理解系統而言,包括幾百個模型。這個系統裡面,從大的方面講,包括物體檢測、人臉識別、人體智能分析、車輛智能分析

等幾個大模塊,具體到比如智能車輛分析這個子方向而言,則包括車牌識別、車型車款識別、車輛以圖搜圖(ReID)、車身顏色識別、標誌物識別、未系安全帶、開車打電話等很多子模型。


「回顧」如何打造一流的視覺AI技術?



對於如此多的算法模型,如果每個模型都需要不斷迭代,同時要支持不同硬件平臺的不同版本,在研發人員和訓練硬件資源受限條件下,如何持續打磨核心算法是一個很大的挑戰。傳統的算法開發模式,算法工程師往往提起數據標註任務,由數據標註員標註完成數據標註,但算法工程師需要關心如何開發標註工具、如何培訓標註人員、如何轉換數據格式、如何提純標註完的數據,最後再手工方式在一臺物理機上將模型訓練出來。這種模式下,算法工程師有60%的時間都在處理和數據相關的工作,比如蒐集數據、指導開發標註工具、清洗標註數據或者發起二次標註;還有20%的時間是在調參數,看訓練日誌,包括處理磁盤空間不足、GPU被別人佔用等意外;其實只有大約15%左右的時間在實現算法,僅有5%的時間在思考算法。同時,這個模式的缺點是數據標註成本很高,算法工程師的時間利用率很低,同時由於沒有統一協調,GPU或者空閒或者被大家搶佔,GPU的利用率也很低。


「回顧」如何打造一流的視覺AI技術?



更好的一種模式是為算法研發團隊配備一個數據平臺開發團隊,專門負責算法團隊所需要的數據以及訓練平臺。也就是說,算法團隊僅僅需要提出數據的需求和要求,其它都由數據平臺團隊去完成。數據平臺團隊負責數據的收集、標註前處理、標註工具開發、標註後處理、訓練和測試數據管理等工作,其目標是為算法團隊用最高效低成本的方式提供高質量的訓練數據。同時,為了提升訓練效率,數據平臺團隊還需要負責打造統一的訓練平臺。這種模式下,算法工程師的工作20%花在溝通確定數據處理流程,同時由於有統一的訓練平臺,算法工程師只需要花費大約10%的時間在訓練調參上。那麼自然就會花費更多的時間在實現算法和思考算法上。這種模式下,不僅僅算法工程師的效率得到提升,而且數據標註成本在降低,數據增長速度在提升,GPU利用率也在提高。還有一點非常重要的是,智能數據處理平臺在正常運行下,只需要標註人員進行標註,數據量就會不斷增長,不依賴算法以及開發人員的投入,這是未來任何一個智能學習系統需要具備的特性。

2.2.2 自動化大規模訓練框架


「回顧」如何打造一流的視覺AI技術?



構建自動化訓練管理平臺的目的是為了提升人員產出效率,節省人力,提高訓練資源的利用率。一方面對訓練數據進行統一管理,每臺機器都能訪問,避免在機器間拷貝;第二,對訓練代碼和參數進行管理,實現代碼、參數、環境自由在多臺機器間拷貝,省去環境搭建的時間;第三,對計算資源和任務進行管理,省去工程師關注資源空閒的時間,同時,可以在沒有空閒資源時任務排隊,省去關注時間,同時提升資源利用效率。此外,為了避免算法人員看日誌的時間花費,增加模型評估和選擇,自動評估和選擇模型。對算法人員而言,可以在網頁新建任務,選擇訓練數據,確定代碼和參數,就可以開始訓練,同時可以設置幾套參數進行訓練,最終等待訓練產出的最優模型即可。

現在已經有很多優秀的深度學習開源框架,比如tensorflow、mxnet、pytorch等。有一些創業公司,自己自行開發了一套自己的開源框架,但我個人認為其實沒有太大的必要。一方面,私有的框架,很難保證比開源框架更加先進,開源框架吸收了世界上最先進的思想,有很多優秀的人會產生貢獻,創業公司很難有這樣的實力做得更好。此外,自己開發的框架,對於新入職員工而言有使用門檻,此外,由於很多好的算法都是在開源軟件基礎上做的,使用自己的框架也不利於進行技術交流。但是,是不是直接利用開源軟件就夠了呢?我想答案也是否定的。現在的開源框架,在大規模數據訓練方面做得還不是很好,總是會有一些特別的任務是開源軟件無法支持的。所以,基於現有開源軟件,根據自己的任務做框架改進是一個對大多數公司而言都更加合理的選擇。


「回顧」如何打造一流的視覺AI技術?



比如對於人臉識別任務而言,最終是一個上億類別的分類問題,如果直接採用現有框架,是無法完成這個任務的。採用softmax作為損失函數,在特徵維度僅僅是128維時,最後一個權重矩陣的數據規模是幾十G,遠遠超過了現在顯卡的顯存。我們必須實現一種新的框架來完成數億類別的訓練任務。我們採用了一種“數據並行+模型並行”的方法,先將數據分配到不同的GPU上,先進行前向預測計算得到經過卷積網絡之後的特徵,然後將不同卡上的特徵進行匯聚。但權重矩陣在一臺機器上是無法保存下的,因此,需要把權重矩陣分配到不同的機器上進行運算這個時候就用到模型並行思路。我們知道,在並行計算中,計算是比較容易通過並行解決的,但是,通信量往往會成為瓶頸。我們設計的這個數據並行加模型並行的方式,只需要把所有樣本的特徵在多機間做同步,數據量很少,所以可以得到很高的加速比。

2.2.3 智能數據挖掘和標註


「回顧」如何打造一流的視覺AI技術?



我們大家都知道數據很重要,但如何低成本、高效地獲取大量高質量數據其實是一件不那麼容易的事情。最簡單處理數據的方法就是收集數據直接人工標註,但直接標註的缺陷是效率很低,比如直接標註百萬級別人臉數據,需要花費近百萬費用,如果標註數億數據,費用顯然是無法承受的。一種常見思路是選擇標註工作量小的有先驗約束的數據源,如相冊數據,每個人的相冊基本上都是來自於家人或者朋友的數據,這樣的數據,直接標註也不合理,比如隱私問題,比如人的標註準確率問題。


「回顧」如何打造一流的視覺AI技術?



我們實現了一套人臉自動數據標註系統,包括如何從圖片中檢測、定位人臉,包括人臉區域割取、特徵提取,包括人臉質量獲取,以及基於人臉質量做過濾,包括做子集中的聚類,以及類間去重,以及訓練人臉模型,同時,人臉模型還可以反饋重新進行人臉特徵提取和聚類,不斷迭代。當然,實際系統要更加複雜,有非常多的參數和細節邏輯,但是,這樣的一套系統,使得人臉識別數據標註成為一個自動化的過程,基本上不需要人工再參與,節省了大量的標註人力。類似的案例還有很多,比如可以依據車牌號碼進行車輛相關數據收集,可以只標註一輛車的屬性就可以得到同一個車牌的多輛車的結果。總之,實踐表明,在數據上花費的所有努力都是值得的,這已經成為技術驅動的創新型公司的核心競爭力之一。


「回顧」如何打造一流的視覺AI技術?



數據平臺團隊,除了準備數據和開發訓練平臺外,還可以參與算法的訓練和改進工作。很多算法,經過算法工程師的迭代之後,在算法方面已經相對確定,更多的是調參和數據相關工作。這一塊是可以由數據平臺工程師通過數據驅動的方式來改進的。比如,我們在一些任務中,就在算法工程師基本不需要參與的情況下,數據平臺工程師通過高效挖掘困難數據並標註的方式可以使算法持續改善。

上述的智能數據處理和自動化訓練平臺系統,結合起來,在我們的內部被稱為深瞳大腦項目。深瞳大腦的終極目標是希望將人工智能中人工的部門減少到最少,打造一套動態更新的“數據採集->標註->算法研發->模型訓練->產品落地->數據產生”的閉環系統,最終僅僅在數據標註環節依賴人工,成為一套真正的基於自主學習的智能系統。

2.2.4 基於硬件平臺的計算優化


「回顧」如何打造一流的視覺AI技術?



除了算法效果、算法功能外,還需要考慮預測速度以及承載硬件的成本。最底層是芯片等硬件平臺的選擇,之上是預測框架,再之上是sdk封裝以及處理流程和分佈式架構,再上層則是各種視覺應用。


「回顧」如何打造一流的視覺AI技術?



這其中涉及很多工作,如硬件的選擇,GPU、Arm、FPGA、DSP還有專門為深度學習設計的ASIC芯片。硬件平臺對整個計算機視覺識別系統非常重要,為了做一個正確的平臺選擇,需要考慮主芯片的計算能力、成本,接口支持豐富程度,以及編解碼、ISP,軟件兼容性以及平臺易用程度等。選定硬件平臺之後,首先應該從算法角度考慮如何減少計算量。比較簡單的是基於經典網絡去改變總的層數以及每層特徵通道數目。進一步,可以結合各種經典網絡去設計自己的網絡,比如在嵌入式平臺上,可以參考Depth-Wise結構、Shuffle Net結構中的核心思路設計自己的新網絡。還可以基於強化學習模型搜索更優的網絡。此外,還有一個非常重要的思路,就是如何通過模型蒸餾的方法去使得一個小網絡訓練得到接近大網絡的效果。除了算法層面外,還可以從異構計算層面利用各個平臺特性進行優化,比如英偉達GPU平臺可以優先考慮TensorRT以及CUDA指令進行優化。

3、格靈深瞳公司介紹及相關應用落地情況

3.1 公司願景

格靈深瞳成立於2013年,公司的願景是讓計算機理解世界,讓AI使生活更美好。我們專注於研發包括計算機視覺在內的人工智能核心算法,並把先進的人工智能科技轉化為具備低成本、大規模部署能力的產品和服務,並深度結合應用場景,為用戶提供高性能、可靠實用的智慧解決方案。

在核心算法層面,我們在人臉識別、人體再識別、車輛智能分析等方向都處於行業領先水平。以人臉識別為例,在十億次誤識一次的情況下,識別率可以達到90%;在車輛的主品牌、子品牌和年款識別上,總類別數可以達到20000種;在行人再識別上,我們的線上模型在沒有針對測試數據訓練的情況下,在Market1501上面首選識別率達到98.1%,超過目前所有的公開結果。

在核心引擎層面,我們打造了一套全目標視頻結構化引擎,支持人臉識別、人體識別、車輛識別以及非機動車識別,支持視頻、圖像、歷史流、歷史視頻文件等多種模式,而且性能指標非常高,普通模式下單機可以做到320路,高速模式下單機可以做到1000路。

3.2 以深瞳大腦為核心的技術產品研發架構


「回顧」如何打造一流的視覺AI技術?



以數據、算法、訓練平臺為核心,我們構建了深瞳大腦架構,基於深瞳大腦,我們可以不斷地產出業界領先的各種算法,比如全目標抓拍算法、全目標屬性識別算法、人臉識別聚類算法、物體以圖搜圖算法、行為識別算法、即時定位和地圖構建等技術。再結合大數據分析技術、高性能計算以及智能硬件技術,我們可以研發出各種各樣的智能終端、感知雲和機器人產品。而基於這些產品,我們可以打造針對公共安全、智能交通、智能銀行、智慧社區、智慧校園、智能零售等行業的解決方案。

3.3 應用及解決方案

「回顧」如何打造一流的視覺AI技術?


「回顧」如何打造一流的視覺AI技術?


我們開發了各種不同的智能硬件產品,包括模仿人眼的可以抓拍到五十米之外人臉的深瞳人眼攝像機,包括可以利用3D信息識別人體行為的皓目行為分析儀,還包括智能機器人。在行業應用上,我們針對智慧城市和智能商業上也做了很多智能解決方案。這裡舉兩個小例子。

對於公安中最常見的視頻找人應用,以前都是基於人臉識別做,但是很多攝像頭因為角度因素或分辨率是拍不到人臉信息的。可以先利用人體圖像搜索得到附近攝像頭中的一系列人體圖像,在這些人體圖像中,有些會包含正面人臉,再利用人臉圖像進行人臉檢索,最後得到人的身份。這樣的方式,可以很好的利用公安的現有攝像頭,在實戰中非常實用,已經幫助用戶破獲了多起案件。


「回顧」如何打造一流的視覺AI技術?



智慧零售也是計算機視覺非常重要的應用場景,其核心思想是希望通過計算機視覺技術,將線下的人、貨、場數據進行數字化,幫助更好的做商業運營和智能營銷。一個很有趣的應用場景是,通過人臉識別技術,將人臉作為人的身份標識,將一個人多次消費或關注的數據關聯起來,從而能把線下購買數據數字化,並更好的對人進行建模,同時還可以形成商場裡面的動線和熱力圖。

4、未來趨勢


「回顧」如何打造一流的視覺AI技術?



未來,希望可以構建一個數據驅動、自我學習的智能視覺系統,隨著應用、數據和算法的不斷演進逐漸變好。

人們往往高估一項技術的短期表現,卻又低估其長期表現,人工智能的路還很長,最終必然是一次長跑。我們希望能夠做對人類有價值的人工智能,做有溫度的人工智能!


「回顧」如何打造一流的視覺AI技術?


鄧亞峰


鄧亞峰北京格靈深瞳信息技術有限公司CTO,畢業於清華大學,曾任職百度深度學習研究院,負責人臉識別方向,具有16年的計算機視覺和人工智能方向的研發經驗。發表過論文十餘篇,申請中國專利超過100項,其中已經授權的有95項。

——END——


分享到:


相關文章: