雷鋒網按:本文為曠視科技首席科學家孫劍日前在 CCF-ADL上做的題為《如何在大公司和創業公司做好計算機視覺研究》的分享,主要介紹了近期計算機視覺的發展現狀,ResNet基本原理和設計,曠視科技在計算機視覺的研究進展等。最后他還分享了一些“ 如何在大公司和創業公司做好研究?”的心得。
孫劍,博士,曠視科技(Face++)首席科學家、研究負責人。
2003年畢業於西安交通大學人工智能與機器人研究所,畢業后加入微軟亞洲研究院(Microsoft Research Asia),任至首席研究員。其主要研究方向是計算攝影學(computational photography)、人臉識別(face recognition)和基於深度學習的圖像理解(deep learning based image understanding)。
自2002年以來在CVPR、ICCV、ECCV、SIGGRAPH、PAMI五個頂級學術會議和期刊上發表學術論文100+篇,Google Scholar 引用 20,000+次,H-index58,兩次獲得CVPR Best Paper Award (2009, 2016)。
孫劍博士於2010年被美國權威技術期刊Technology Review評選為“全球35歲以下傑出青年創新者”。目前孫劍博士正在帶領曠視科技的研究團隊推進計算機視覺技術的進步和探索其在工業和商業上的實踐。
本文為曠視科技首席科學家孫劍日前在 CCF-ADL上做的題為《如何在大公司和創業公司做好計算機視覺研究》的分享,主要介紹了近期計算機視覺的發展現狀,ResNet基本原理和設計,曠視科技在計算機視覺的研究進展等。最后他還分享了一些“如何在大公司和創業公司做好研究?”的心得。
計算機視覺發展現狀
去年夏天我加入曠視科技,就是大家所熟知的Face++,Face++其實是早期一款產品的名字,而並非公司名稱。簡單來說這家公司主要就是用深度學習來做計算機視覺。計算機視覺是目前人工智能中比較熱的一塊。
大家目前將人工智能分為感知智能和認知智能兩部分,其中語音識別、計算機視覺是人工智能進展最快的技術。(上圖)右側NLP和各種通用人工智能,屬於認知智能領域,這部分有很大的進展,但仍處於很強的探索階段,所以,沒有(上圖)左側綠色部分進展大。
曠視科技就是做感知智能的計算機視覺部分。當然,計算機視覺並不只是純感知智能,它也涉及更高層的理解。但是作為感知智能的第一步,它很大的一部分功能是在做感知部分。
計算機視覺和語音識別不一樣,語音識別可能只有一個應用,就是做翻譯。把語音翻譯成文本信號,當然還有一個文本合成的任務,但是它的主要任務只有一個,就是一直改善文本信號處理的結果。
但是計算機視覺很不一樣,它的應用非常多,這里列舉了 6個比較熱且重要的應用:
視頻監控
人臉識別
醫學圖像分析
自動駕駛
機器人
AR、VR
計算機視覺技術的內容非常豐富,並不是簡單的圖像識別,它還涉及很多其他的知識。
曠視科技在2011年~2014年做了一個Face++這樣的人工智能開放雲平台,提供人臉識別、圖像識別的開放服務;從2014年開始,公司聚焦在兩個方向:一個是互聯網金融,以提供人臉識別認證服務為主,另外一方面是IoT,就是智能前端化。往后,我們希望打造最好的智能雲和智能機器。
曠視怎樣去做視覺智能呢?
基本路線和很多公司類似,從技術、到產品、再到數據,希望這三部分能運轉起來。
今天深度學習的方法需要大量的數據,更精准的說是大量的標注數據,有大量的數據,才能把算法做的更好。很多人會問數據如何而來,曠視認為最有效的方法還是通過真實業務,不斷地把數據從真實場景回流回來,然后再去驅動算法,自然就可以把第一版算法做不好的事情解決了。
曠視科技研究院的基本任務是產生核心的技術,這些技術可以用來做產品,然后產品落地到市場。
研究院主要關心4個技術:
分類
檢測
分割
序列學習
其中分類技術是對圖片做一個分類,或者對圖片中的區域做一個分類,或者對圖片的每個像素都做一個分類;序列學習技術是輸入一個視頻,或者一個有序列的Python(比如一串文字)后,怎樣用序列之間的關系來做學習和推理。
這里不包含計算機視覺3D感知的部分,一個公司要做計算機視覺,首先要聚焦在一個具體的方向。
這 4 個方向的主要研究成果有:
圖像分類:現在最強的方法是用深度學習來做。有個數據庫叫ImageNet,這張PPT展示的是2010年的一個比賽情況,上面的數字是Top5的錯誤率,意思是大概1000類的物體大概能分多准,這個數字越小越好。
最大的進展發生在2012年,Geoffrey Hinton和他的學生Alex第一次用深度學習方法把錯誤率大幅降低。隨着神經網絡的深度層次越來越多,錯誤率越來越低。
在2015年的時候,當時我在微軟亞洲研究院的團隊做的ResNet,第一次把網絡的深度從幾十層提高到100多層,后來可以做到上千層。后來在ImageNet的數據庫上,error可以降到比人類還要低的錯誤率。
背后的核心技術是深度卷積神經網絡,這個網絡其實是一切嵌套到非線性函數的組合,因為不斷的嵌套非線性,構成了一個非常復雜的非線性系統。
深度神經網絡的一個精髓是要做end-to-end Learning,輸入最好不要涉及feature,因為中間的很多參數都希望整個系統是可求導的。不輸入feature的end-to-end Learning的 ,所有參數都可以學,從而簡化了訓練過程,避免了很多人工因素。
一個系統如果非常復雜的話,但人的能力是非常有限的,人類只能調有限的參數,所以能簡化訓練的end-to-end Learning顯得尤為重要。
那么問題來了,如果做一個非線性變換,這相當於映射一個函數,那么研究人員到底要做什么呢?以前研究人員的主要任務是設計feature,設計一個有效的feature是一個很大的貢獻。有了feature再設計分類器,在end-to-end Learning的體系下,你到底可以做什么東西,能夠對end-to-end Learning有用?
仔細觀察神經網絡的結構,有一部分不是learn出來的,比如網絡的結構就不是learn出來的,結構目前還是手工指定的。
不過現在的一些最新的進展,希望通過RNN的方法或者是深度增強學習的方法,來自動探索網絡結構。目前來說,還沒有很顯著的成果。
如果你指定一個卷積神經網絡的話,里面的結構有一些變量是可以來設計的。這個是時間復雜度的公式,這里面有幾個關鍵的數據:Depth(深度),filter number(卷積神經網絡每一層filter的數目),以及filter size卷積神經網絡每一層filter的大小)和filter map size(圖像卷積后的空間分辨率)。這同時也是決定一個網絡計算復雜度的公式。
其實一個網絡的能力在很大程度上是被計算力限制。比如說計算力法則,如果相似體系的一個網絡,如果計算力相似的話,不管參數多也好、少也好,包括上述提到的在變化的參數,大致的filter能力都是相似的。在design space中,我們可以做一些事情,探尋一下怎樣組合這些參數,能夠做一個更好的網絡。
其中有一些設計原理,比如在對圖像分類的時候,隨着層級的增加,應該把圖像的空間分辨率慢慢縮小,但這同時也需要在每一層中增加filter number。后來大家發現,用小的filter size是更經濟的,還有一些則包括用Low-rank逼近的方法,比如說在網絡中持續的用1*1的filter。
我們在2015年的時候研究過,哪些參數是最關鍵的,當時的結論是在剛才的4個參數里面,深度是非常關鍵的。如果給定你一個fixed的計算代價的話,你首先要考慮的參數是深度,深度決定了這個網絡的能力。有興趣的話可以參看下面這篇論文。
2012年,AlexNet是8層網絡,幾層卷積,幾層全連接。當時很多人是不相信深度是有用的。但是兩年后,牛津大學和谷歌分別做了VGG Net 和Google Net,隨着層級的增加,性能得到大幅改善。
ResNet基本原理
2015年,微軟提出了ResNet,進一步將深度從20多層推進到152層。ResNet的關鍵思想是引入了一個跳層的技術,理論上叫“殘差學習”的概念。我們可以將神經網絡理解成嵌套很多層的映射,從輸入到輸出,如果直接映射很難的話,有可能殘差學習會更容易。殘差學習的意思是只學輸出相對輸入的變化,而不是直接學習輸入本身。
舉個例子,如果一張圖像有些噪點,你想學習一張沒有噪點的照片,那你可能只需要學習怎樣去掉噪點就行了,而不需要去學習怎樣重構一張自然的照片。
殘差學習的設計結構和以前網絡比起來非常簡單,只是加了一些跳層鏈接。
這個網絡為什么能訓練好?這個是我們官方的解釋,比較直觀。如果從前向角度看,在訓練過程中有一個動態的特性,整個訓練系統是由淺到深的。在訓練的初期,可以認為我們是在訓練一個淺層的網絡,后期是深層網絡。
目前神經網絡采用反向傳播算法,梯度反傳過程中幅度會逐層衰減。如果網絡淺還好,如果很深的話會衰減到非常小,最后相當於反向傳播,就傳播不到前面去了,導致訓練困難。在新的Design of ResNet里面,大家可以看我們的論文,大概意思就是反向傳播的梯度會從最后結果一層直接回饋到很多中間層去。而這個幅度都是不小的。所以從這個意義上來說是繞開了以前梯度消失的問題。
這個工作為什么會有這么大的意義?原因是當做到20層后,就很難再做下去;當再加層的時候,訓練將變得非常困難。加完以后訓練錯誤和測試錯誤都會增加,這其實是個非常大的優化問題,ResNet就試圖解決這個優化的問題。
方法有兩種:
第一種方法尋找是不同於隨機梯度下降的新方法,這個可以行的通,但是非常困難。神經網絡發展這么多年,最有效的還是隨機梯度下降法,原因未知。
第二個方法,如果能夠從新定義這個問題,重新修改數學的formulation的話,就會使解決問題變得容易。學解線性系統的時候我們知道,有一種方法叫做preconditioning,要解方程時,左右兩邊乘另外一個矩陣,乘完以后整個系統的解其實是不變的,但是這樣以后去做優化就會變得容易很多。通過類比以后,殘差學習的reformulation,可以讓優化過程變得更容易,這個也是引入殘差學習最大的意義。
ResNet優化的結果是到今天為止不管設計多少層的網絡,只要顯存裝的下,只要能訓練起來,這些都沒有任何問題。這就破除了深度學習歷史上的一個魔咒:深到一定程度就訓練不了了。在深度學習的發展過程中,在一定階段是沒有人相信會有這么深的訓練系統。
如果考慮非線性系統的話,這么多的參數,這么高的非線性,怎么能給他訓練好呢?現在實踐做到了,但理論研究很不完善,因為它是一個高度的非線性系統,缺少有效的分析工具,大多數好的分析工具都是分析線性系統的。
以上是ResNet的基本原理。
ResNet設計
下一步曠視(Face++)要做的就是如何將ResNet 怎么設計的更好,其中一個方向是要有更高的精度,但是在實際的工程應用中有個很大的問題:就是它的計算量是非常大的。如果你用參加ImageNet得冠軍的那個Model來去做實際應用的話是非常不現實的。
大家可以看一下這個圖,x軸是不同的網絡,y軸上每個bar上的數字是每個網絡的計算量,單位是GFLOPs。可以看到雖然error下降了,但是計算量卻在不停的上升。
雖然結果做的很好,但是計算量非常的大。比如說一個好的網絡可以到十幾到二十幾的GFLOPs,但是在實際應用中,我們常用的手機或者嵌入式設備,能承擔的GFLOPs可能在0.01,也就是說你需要做一個百分之一或者千分之一計算復雜度的Model,才可以在實際的系統用,所以這是一個很大的挑戰。
目前曠視(Face++)與研究領域在不同的方向探索后找到了一個解決方案,大致有三類方式可以解決這個問題:設計一個更好的網絡,或者簡化網絡,再或者對於如何表述網絡內部的值可以做一些研究。
第一,如何更好的設計這個網絡?這里列了一些最近比較流行的網絡設計。整體網絡的結構還是ResNet的設計,但是每一層怎么設計,每一層怎么設計最經濟,所以這是一個非常重要的問題。
第二,在簡化網絡方面,我們可以做結構的Pruning,這里我大概分了一共有3種方法。
第一種方法叫做稀疏連接,本來一個網絡里有很多連接的。然后基本思想是去除不重要的連接,讓這個連接變稀疏了。但是這個方法的問題就是它可以減少網絡的模型大小,但是不一定能夠減少網絡的運行時間;
第二種就是tensor分解的方法,就是把一個卷積網絡通過tensor分解,用它的低值特性做逼近;
第三種是channel pruning,是我們最近做的一種比較有趣的方法,就是訓練好一個網絡后,簡單粗暴的把一些channel 去掉。
其中這個tensor分解的方法,基本思想是a是原來網絡設計的卷積過程,然后怎么能夠將它通過一個低值分解的方式,拆成中間的channel filter數目比較小的b。
第三,就是我們在曠視(Face++)做的非常多的Low-bit的表示。這張圖大概描述了一下什么是卷積,卷積就是輸入一個三維的feature map,拿另外一個卷積核在上面卷,feature map標准的話都是float表示的,卷積核其實也是一個三維的矩陣,它也是float表示的。Low-bit的表示方法就是不要用這些float的方式來表示,而是用一些低精度的表示,比如8位或者更加極端的兩位來表示。
大家可以看到這是之前的兩篇比較著名的工作。一個是Binary connect,他的思想是把這個weight都變成01,這也是很誇張的一個想法。下面是更進一步的工作,它是將feature和weight全變成01,這樣的好處是叫XNOR-Net,好處是卷積神經網絡里的矩陣層,可以變成一個bitcount的指令,就可以完成它想要完成的計算,這個是在硬件中很有效的一個方法,也是Low-bit網絡非常吸引人的地方。優點在於:1.內存可以降得非常多;2.潛在的加速比非常大。
這個(Low-bit)Reoresentation是我們曠視(Face++)研究員做的,它除了能量化weight或feature,還可以量化gridient,就是在反向回傳的過程中,gridient標准其實也是float的,他的意義是如果你想做並行訓練,主要問題是通訊的overfit非常大,也需要傳gridient,或者你想把訓練放在FPGA或者芯片上來做的話,這樣如果你能做weight或feature,gridient的話,你就可以做這樣的訓練。
所以我們推薦了一個設置就是weight用01表示,activation用兩位表示,gridient用4位表示。所以我們同事將它取名為DOReFa-Net。
這個圖表是最近的一個類似的工作,比較了一下DOReFa-Net和他們的Net的性能差別。
人臉識別的進展
嵌入式的設備是比較小的,比如FPGA,但是其實是可以做很大的空間的,下面是人臉檢測在FPGA上的一個實時演示,這是我們實時抓屏下來的。它不帶任何Tracking,用一個便宜的FPGA就可以做到這樣的30幀或60幀的人臉檢測和跟蹤的效果。這是非常重要的,尤其是在實際應用中。說到人臉和圖像分類,最重要的就是人臉識別,這個我自己也做了非常多的時間。曠視(Face++)一開始就是以人臉識別為主的。
當然思路有兩類,一個是把它當做分類來做,每個人都有多張照片,你將它們分成一類,這樣非常簡單。
另外一類是叫測度學習的方法,學習一個feature,來自同一個人的不同照片距離比較近,不同的人的照片距離比較遠。
兩種方式都很好,而且還可以結合。那現在人臉識別的進展是什么樣子的呢?
這個是2013年的進展。2013年有個評測人臉識別的face benchmark,我和我們的同事做了一個Hi-dim LBP的工作,曾經是最好的。
如果和人的性能比較,在這個數據庫上比起來還是不夠好的。當時不管我們怎么設計這個feature,不管怎么用線性的學習方法,也就到這個地步了。但是隨着深度學習的出現,其中一個代表性的工作是facebook 的deep face,第一次用深度學習的方法把結果做到了很接近人類的性能。
然后過了一段時間之后,包括曠視(Face++)在內,我們的研究很快就超過了人類的性能。大家也許會好奇是不是真的超過了人類的性能?今天媒體動不動就宣布機器在這個項目上超過人類了,在那個任務上超過人類了。那是不是這樣呢?從學術上來說,在這個benchmark上是超過人類了。但是在應用上,到底有沒有超過人類呢?
這里是我們做的人臉識別的應用。有兩個大的應用,一個是做1:1的驗證,其中一個驗證就是提供在線身份驗證,和你的身份證照片比對。我們現在已經為上億人提供了人臉身份認證的服務。另外一個人臉識別的應用是,在數據庫中對人臉進行搜索。可以說在很多人臉識別的應用上都已經超過了人類,但並不是全方面超過。
物體檢測的進展
第二個我們關心的就是物體檢測。簡單來說就是你不但需要知道圖像里都有哪些東西,還要知道物體在哪里。這是一些目前走在前沿的方法,最重要的方法是Region-CNN,我們叫R-CNN,這個方法很簡單,就是把一個區域摳出來,對每個區域做分類。
這個是R-CNN的基本流程,輸入進來用一個叫Region Proposals的傳統方法,大概找出圖像中物體包括幾百幾千個框,然后把每個框做分類,非常簡單有效。但是這個方法有個很大的問題就是他需要對幾千個框都run一遍CNN,這個計算代價是不能容忍的。
后來我們在2014年的時候,ECCV上發了個論文,這個叫做SPP-net,基本思想是卷積神經網絡出來的feature是非常強大的,包含遠超我們想象的豐富信息。直接在feature map上去做prop,prop后把feature拿過來直接做分類,所以可以得到幾十倍上百倍的加速,而且性能幾乎不變,所以這也增加了我們對卷積神經網絡的信心。
不論是SPP-net,Faster R-CNN,R-CNN都有個問題。
第一步都需要一個Region Proposal,這是通過傳統方法來做的。用了Faster R-CNN或者SPP-net后,CNN花的時間非常的少,但是Proposal用的時間非常的多。
這個是用Region Proposal的一些方法,其實還是人工設計feature的方法,所以既然我們是用深度學習的方法,Region Proposal既不是深度學習的方法,也不是end to end的,所以我們就想用什么樣的方式來替換Region Proposal。
基於這個我們提出了一個faster R-CNN,基本思想是先去卷積一下這個圖,得到feature map,然后用它來直接預測Proposal在哪里,拿到Proposal再做Faser R-CNN,也是非常簡單的方式。整個系統都可以end-to-end的訓練,當然這里有一些逼近。
這是Faster R-CNN的效果,它是第一個能做到100、200毫秒級的整個過程的檢測。這個在以前是沒法做的。而且通過這樣end-to-end的訓練,像這樣分開兩步的訓練是比人工設計是更高的。Faster RNN的核心思想是,feature map上可以假設有個sliding window,每個sliding window都會輸出Region Proposal。
下邊是用faster RNN系統做的檢測,而且這個方法是single skill的方法,不需要對圖像做計算,而是它可以考慮到大小尺度的所有信息,它可以Propose小東西,也可以Propose大東西,一個尺度的feature就可以handle不同長寬比大小的物品。
這個系統也被大家廣泛使用,源代碼在網上都有。
我們來比較一下最新的物體檢測框架,分別對應3篇論文。第一個是說faster RNN和SSD系統,faster R-CNN是個兩步方法,第一步出Proposal,第二步做分類和refine;還有一類是一步法,以SSD Single Shot為代表,就是它希望一步出結果,最后一個是我們一個前同事戴繼峰做的工作,叫R-FCN,他會是faster RNN的一個比較有趣的修改。
如果看今天物體檢測的benchmark,最好的方式是用ResNet拼接了五個Faster RNN的系統。
文本檢測
物體檢測非常重要,還有另一類是文本檢測。我們都知道,文字的檢測其實是非常難的,而且與物體檢測也存在不同。
文字檢測的主要特點是它的流程(pipeline)非常長,從設計模塊、調整參數到訓練都要花非常多的時間和心力。
深度學習的精髓是做端到端的訓練,曠視(Face++)研究院今年在 CVPR 上發了一篇論文,就是一個基於 FCN 的簡化文本檢測算法。輸入一張圖片后,系統會生成Geometry Map 和Score Map兩個Map,進而實現端到端的識別,這也是文本檢測第一次能用一個這么小的模型實現,這里是它的一些量化評測,在公開評測集上取得了非常好的效果。
我們的研究員正在用不同的方法做一個實時檢測的 demo,大家可以看到,這里其實並不涉及文字的識別。
語義分割
第三部分我們關心的是語義分割。即如何把像素映射到一個有語義的標記上來。
其中一個非常大的應用就是無人車。即在感知的時候需要知道人和車的位置。其實用非深度學習的方式已經做得非常不錯,但如果涉及更復雜的情況,用深度學習可以做得更好。
在這里我們會采用 FCN 的方法(fully convolutional network,全卷積網絡),用下采樣抽取后再上采樣回來,輸出一個 feature map 或是有語義的 map,以完成一個端到端的學習。
涉及的一個概念叫 receptive field(感受野),也就是卷積的特征到底能覆蓋多大的區域,而實際上還有一個叫有效感受野的(valid receptive field)概念,因為實際情況往往比理論上覆蓋的區域要小。
在研究中我們會發現,做分類和分割實際上是不一樣的任務。分類的話,研究者會希望感受野越大越好,而分割則可能需要控制一下。
這和標准的 FCN 還是有不同。如果你想識別圖中的鳥的話,實際上我們還是需要一個很大的 receptive field 的。
我們曠視(Face++)實習生最近做了一個工作,他設計了一個方法,在大的 receptive field 或是大的 kernel 中也能實現很好的效果。這也是我們今年 CVPR 的一篇論文《Large-Kernel FCNs》,當時(的結果)在 VOC 2012 Segmentation on Benchmark 上排在第一位。
3D感知問題
以下是三個分類的核心問題。計算機還有一個問題就是 3D 感知問題,而且並不需要兩只眼睛,一只其實也可以實現先驗感知。
那么用深度學習是否能實現 3D 重建?自然是可以的。
目前研究員在研究如何用單張圖片實現 3D 重建。左邊是一個圖片,右邊是它構建的 3D 點雲。看不見的地方我們需要利用先驗猜一下可能是什么樣子。
那么 3D 形態是如何構建的?最難的地方是如何表示 3D。傳統方法包括用深度圖或是 mesh 等方法實現,即判斷一個空間內某個格子是否有這個物體。我們研究員采用的是 3D 點來表示物體的方法,能夠呈現連續的特點。
3D 數據庫訓練了一個檢測的 pipeline,紅色列是輸入,二三列是輸出,根據先驗知識判斷,形成一些合成例子。
在提交論文前,我們在辦公室隨便拍了一些物體,也得到了一些還不錯的結果。這篇論文在 CVPR 上也拿了 oral paper。
由於時間有限,一些技術細節我們在這里就不詳細討論了。
Brain++深度學習平台
在這里我想提一下我們曠視(Face++)自己有一個叫 Brain++的深度學習平台,每個研究員或訪問學生只需要用虛擬機遠程登錄就可以實現算法訓練,甚至還包括數據管理、數據標注和模型發布的整套系統。用戶標注的數據可以直接上傳到系統中,經過訓練后就能直接發布模型了。
其中核心的一部分叫 megvii brain,是一個深度學習的訓練引擎,大家可能都聽說過 caffe、TensorFlow 或 MXNet,那么你可以把 megvii brain 理解為 曠視(Face++)的「TensorFlow」。TensorFlow 已經開源一年,而我們的 megvii brain 已經兩年了。
為什么說曠視(Face++)是應用深度學習比較早的公司呢?不只是在做應用,其實底層的技術我們也在做,也開放應用了。
好處在於,很多定制化的東西我們可以自己來做。相對 TF 這樣體量大的系統,可能用戶在上面做一些改動就會產生很多問題。此外,引擎的占用內存小,訓練速度快,有很多東西是我們可以控制的。
前面我們提到了一些技術,接下來會說說產品能做些什么事情。
Face++產品及應用
Face++有兩類產品,一類是人臉識別的 FaceID;另一類是智能攝像頭。
FaceID
FaceID 實際上就是為了解決一個問題:「如何驗證『你是你』?」
比如線上銀行開戶、或是 Uber 司機的身份驗證,目前也有很多方法,不過現在用得比較多的還是人臉識別的解決方案。
FaceID 的 App 身份驗證方案的流程是這樣的,用戶拍一張照片,通過活體檢測部分比對身份證信息,通過客戶端的 SDK 與雲上的計算實現比對任務。而 SmartID 則屬於 SaaS 服務,目前已經應用於非常多的領域,包括線上線下的銀行,還有以芝麻信用為代表的征信風控業務都在用我們的服務。
前一陣 3·15 展示了如何破解人臉識別技術,這里涉及到一個問題叫「活體攻擊問題」,其實反過來想,如果它已經形成一個地下黑色產業鏈,說明已經成為一個非常有價值的業務。
智能攝像頭
第二個方向則是智能攝像頭。
我們將算法嵌入攝像頭或計算盒子,主要方向是做家庭或公共安全的分析。大家可能了解過,中國的攝像頭數量超過世界上的一半,而超過一半的硬盤都被用於存儲視頻監控內容。
我們來看看交通規划方面,曠視(Face++)的產品能做些什么。如果你能分析清楚視頻中的人流車流的 ID,那么這也具有價值。
比如我們做了一套門禁系統,員工上班時不需要打卡,只要走過這個玻璃門前,就能自動識別人臉。目前這套系統也已經獲得上百家公司的應用。
此外,我們還可以根據這套系統做一些改變。比如中國每年有很多展會,在注冊服務上可能需要很多的人手跟進,那么我們這款產品就能打造成一個基於人臉識別的自動注冊系統。
有了這些產品,勢必會產生非常大的數據,目前 曠視(Face++)的開放平台 API 被調用的數據在 2016 年達到了 60 億次,很快會接近 100 億次。而我們的 Smart ID 也已經服務超過上億人(不是上億人次)。
從感知智能到認知智能
我們也希望實現「技術-產品-數據」的一個閉環,也是通過服務不同的行業實現 AI+的方式。我們再回到人工智能。
左邊的綠色表示的是擬合映射的任務,用一個函數 F(x)就把很多內容解決了,提供大規模的標注數據就可以實現。但右邊的任務就不是一步法就能做的,涉及很多的判斷,而且右邊的內容可能無法提供一個大的訓練環境。雖然目前有很多新技術,也有大量的投入,但還沒有很多進展。
計算機視覺雖然我划在左邊,但實際上它也涉及右邊的認知過程,比如系統能能夠判斷一個視頻里面的內容,而這就涉及到很多 language 和常識的支持。
那么如何從感知智能向認知智能轉變呢?
我從一本 2004 年的書中得到很多靈感,它的名字叫《On Intelligence》。作者 Jeff Hawkins 創建了一個研究院,研究如何做類似人腦智能的內容,雖然研究院規模不大,成果也尚不足以證明什么,但書中提出的思想都非常早,包括如何利用存儲機做人工智能。
現在訓練神經網絡是沒有內存的,而人類擁有記憶,根據書本、知識將內容傳承下來。那么像 Facebook、Google 這樣的公司都在做 Memory mechanism 的學習系統,要解決的核心內容在於要存儲哪些內容,讀取哪些內容,又該做怎樣的聯想。比如人類記得一首歌、記得一句話,是按一定的順序記憶的,如果反過來,可能我們都回憶不起來。
此外,很多知識是分層結構的。因此這些內容如何以一個合理的機制存在,是我一直非常關注的研究方向。
另一個我自己覺得非常有意思的內容是無監督的預測。它的基本思想是說,人在學習過程中是需要和物理世界發生交互的,而人類通過觀察現實世界就能學習到很多東西,不需要進行額外的標記。雖然我們不否認家長的重要性,但小孩學習的很多東西,也有很多不是父母教的。孩子在觀察世界、與世界互動的過程中,包括基因傳承的一些內容,就會自發地學習。
舉個例子,我們衡量智商會通過 IQ 測試,比如給出一列數字,讓你預測下一個數字是什么,或給一串文字,讓你判斷下一個文字。對將要發生事情的預測,是一個非常重要的監督信號,能夠在整個學習過程中運用。現在有很多的研究,通過一段視頻,判斷下一幀的內容是什么;或通過一個圖片預測另一個視角的樣子。在這些過程中系統都能學到預測的特征。
在做深度學習時,我做過一篇論文叫《An associate-predict model for face recognition》,解決的是人臉識別中不同姿態的問題。當時我嘗試創建了一個外部存儲,通過存儲 memory 來做預測,效果非常好。但系統本身非常原始,而且是深度學習時代之前的一個研究內容。
那么在無監督預測中,比如真實世界里有一個南瓜,可能人類可以猜出南瓜后面大概長什么樣,這就是「image completion」問題,也是十幾年前我們做的一個研究,即通過圖形學的方法猜出背后的內容。那么今天在感知世界中,我們可以對被遮擋的東西做很多的感知,一個是我們的能力,另一個是教我們如何對真實世界進行推理和預測,通過很多觀察的過程進行學習。
總而言之,人工智能很難,但我們從中也看到希望。這是朋友給我分享的一個圖片,希望我們能夠抵達一個至高點。在這個過程中,希望我們的技術商業數據能夠實現循環,而對於每一個從業者來說,我們也需要有足夠的熱情、洞察力和耐心去做這件事。
我為什么相信這件事呢?今天世界上所有最聰明的人都在投入做人工智能。這張照片是我參加 CTC 大會時拍的,以前這是一個圖形學的會議,會研究游戲怎么做。但近年來我參加這個會議,5000 人的圖形學大會都在研究怎么做深度學習,更別說我們這些做機器學習的人了。
曠視(Face++)也進行了一個走入校園的活動,分享 CVPR 的五篇論文。曠視(Face++)也希望能找到「數學好、編程好、態度好」的三好學生,和我們一起 All in。
如何在大公司和創業公司做好研究?
最后,我想分享下如何大公司和創業公司做好研究,這些都是個人的一些感悟。我經常被問到以下幾個問題:
在創業公司還能否做研究?
在創業公司能否做好研究?
是不是會完全被產品導向?
研究是不是只有用paper來衡量?
研究成果被友商抄去了怎么辦?
(AI科技評論注:孫劍在演講最后給出了自己的回答。)
大公司和創業公司的研發部門的異同
任何一個研發部門,不管是大公司還是小公司,在我看來,其共同的部分是這三個要素:
部門的定位是怎樣的?
部門的人員組成是怎樣的?
研發方式是怎樣的?
這些對應的就是柳傳志先生的“定戰略、搭班子、帶隊伍”管理三要素。
我自己比較了一下大公司和小公司,特別是微軟研究院和曠視研究院:
我們的使命定位是類似的,但是我們的目標范圍是更小的。我們現在只關心的研究最好的深度學習和計算機視覺技術,讓最好的技術落地,推動公司的快速發展。
在人員組成上,我們也是非常類似的。唯一不同的是,我們只有一個人不寫code。我們曠視研究院員工的平均年齡也非常小,而且管理是非常扁平化的。
研發方式方面,因為規模不同,所以有些不同。我們的范圍更小,更聚焦,我們每個小組的動態性也更強,可以短到3個月,也可以長期下去。
創業公司如何招募人才?
有了以上三個方向之后,接下來就需要招募人才。
大家可以看到,一般的創業公司都是通過什么方式來招募人才,其實最重要的還是第一條:people bring people(口口相傳)。你可以通過通過個人關系,把最聰明的人引進來。
當然,公開發表論文這件事情也很重要。因為不管是做深度學習還是人工智能,最優秀的人才是希望他的成果能夠讓大家看得見的。所以在曠視研究院,我們鼓勵大家發表公開論文。
我們的人才培養大致有這幾個方向:科學家、系統架構師、以及我們自創的全棧人工智能工程師。
雖然人工智能很復雜,但是做應用的話還是相對來說沒那么高的門檻,因為深度學習在一定程度上把這個過程縮短了。所以對系統能力強、工程能力強,同時又想做好研究的人,我們設立了全棧人工智能工程師這個職位。他們既是人工智能科學家,也是一個很強的工程師,有很強的解決問題的能力。
創業公司如何做好研究?
我們認為組織建設最重要的是:正直、對自己誠實;平等;安全感、鼓勵嘗試;學習型組織。
曠視公司的使命是“power human with AI”。一個組織要想真正運行下去,運行好,隨着規模的增大,公司的使命是非常重要的。我們目前的願景是:做最好的人工智能的雲平台和最好的智能感知網絡。我們的價值觀是:追求極致、簡單、可靠。
有了人,有了環境之后,要做好研究有三個非常重要的元素:需要有清晰的目標,需要motivate每個人,最后把事情貫徹下去。
關於目標設定,大家可能都有自己的標准,我們認為應該要分別設立終極目標、績效目標、以及過程目標。我們希望這些目標是能實現的,但是同時又是有挑戰性的,而且是大家都agree的。一般的話,我們會為2-4個人的組來制定長期和短期的課題。
有了目標之后,最重要的是怎樣讓大家為這個目標投入最大的精力。首先,我們相信任何人都是有巨大的潛能的。當然,每個人都有選擇的自由,也需要他們的專注、以及想贏的心態。這些是我們認為能提高大家士氣的方法。
我們在深度學習訓練平台、數據標注上的投入是不遺余力的,希望能夠為研究員、實習生創造最好的訓練環境。
在創業公司到底能不能做好研究?
最后,回到之前的問題:“在創業公司是否能做好研究?”
我的結論是,可以做最好的研究。我們可以在產品和學術之間找到很好的平衡點,我們的研究既可以用paper來衡量,也可以用研究在產品中的落地和給你帶來的成就感來衡量。當然,我們會選擇性地發布我們的一些學術性成果。
Q&A環節
Q:在面部識別中,有些惡意攻擊能夠繞過活體檢測,現在的技術可以解決這個問題嗎?
A:這實際上是一個安全問題,我之前寫過一篇文章來回答這個問題。任何安全問題,絕對意義的百分之百的解是沒有的,它只能是說比原來的系統更安全。此外我們也有非常多的防止這種攻擊的方式,包括客戶端的、雲端的等等。
客戶對安全問題的承受力是不一樣的:有些客戶希望盡可能獲取更多的用戶,因此安全性較低是可以承受的,比如信用卡欺詐。信用卡簽字每年有很多欺詐案件,但是總體來看,發卡公司是能夠承受的,因為其帶來的利益遠大於損失,因此可以接受這樣的交易方式。
從大的方面來說,這是非常有效的方式,非常多的客戶對現有的安全程度是認可的。另一方面,從技術上方面來說,會有不斷的新的防活體攻擊的技術研發出來。
Q:目前大多數的活體檢測需要用戶的配合(比如眨眼、張嘴等),未來是否可以不再需要用戶配合,在用戶沒有感覺的情況下,判斷他是不是假體?
A:大家可能已經聽說,iPhone 8要推出前置3D紅外攝像頭,這就是一個非常好的新的發展方向,提供了有着最好用戶體驗的檢測活體攻擊的新思路。
Q:用紅外或者三維這樣的方式,可以解決平面型的,比如打印、視屏的攻擊。但是對於以后可能出現的3D打印的,或者頭套之類的攻擊,這種方法是否還有效?
A:對於頭套攻擊,在業界,包括我們客戶都認為,這種假面具、假頭套超過了現在要考慮的范圍?
Q:您剛才在演講中提到,“深度是決定一個模型學習能力最重要的因素”。那么這個深度到底有沒有一個上限?對於一般的檢測和識別任務來講,什么樣的深度就夠了?
因為最近有個技術叫模型蒸餾,有一些可能用了一個50層或者100層的模型,但是最后通過模型蒸餾可以用一個10~20層的模型來表達。那就是說,我們在原始設計這個任務的時候,已經增加了很多的冗余量進去了,您是怎樣看待模型蒸餾的呢?
A:深度到底要多深跟很多因素有關的。深度最重要的是有很多假設的,當然,跟你的數據量的大小有關,還跟其他因素有關,如果不考慮這些,基本上只要能夠匹配好數據大小,越深越好。
關於模型蒸餾,它實際上是個優化問題。因為模型蒸餾還是需要一個大的模型來帶着小模型的,那么這個大模型是哪來的?大模型怎樣才能訓練好?這些都是要考慮的,因為大模型訓練好之后才有小模型。蒸餾是一個很好的方法,但是有時候管用有時候不管用。
有些數據有關系,包括我剛才介紹的模型簡化,也是去除模型冗余的方式之一。大模型為什么能夠被“蒸餾”,其實是因為小模型非常難訓練,而大模型給了充分的自由度,因此可以訓的很好。這意味着,首先需要有一個能訓的很好的系統,才能誘導這個不好訓的系統。
如果你直接切換成小模型,以現在的技術來說是很難訓出來的。所以說,至少對訓練來說,深度還是非常重要的。
Q:您在做公共區域的視頻分析的時候,是基於圖像做的,還是訓練數據用一小段視頻去做的?
A:基於圖像做的。
Q:您之前提到的一個檢測region proposals的方法,請問能詳細的解釋一下Faster R-CNN的基本思想嗎?
A:以前的檢測方法是sliding window,每個位置都會去檢查,幾萬個、幾十萬個都有可能,region proposals用一些方法把這個數字降到幾千,這樣就可以很快做evaluation。
Faster R-CNN的思想:以前是在圖像上做sliding window,現在是在feature map上做sliding window,去預測物體可能在哪里,其實也可以認為它是一種sliding window。
Q:您剛才提到公司產品FaceID可以再雲端實現,也可以在客戶端實現。那么它在客戶端實現的硬件平台和主要思路是什么?
A:我們開發Brian++的一個目的是:一個模型可能需要支持很多平台,包括自己內部給產品做的SDK同時要支持20多種平台,包括手機、嵌入式、ARM7、ARM8,甚至包括安卓、Windows等等。我們需要支持非常多的平台,不同平台的計算不同,比如手機或者平板上精度model size是一定要比雲端小很多的,主要是看具體業務需要做到什么地步,然后再去平衡計算復雜度和精度。
Q:關於網絡結構學習,以我的了解,現在的網絡學習一般都是在學習好之后,然后通過剪枝的方式來優化這個網絡結構,使得這個網絡結構更加精簡。那么是不是能通過不斷地數據流入,網絡結構不斷學習,實現生長式的學習過程?
A:這方面的文獻目前很少。實際上,通過增強學習方法來不斷調整網絡結構目前不是非常成功。目前來說,訓練一個非常有效的網絡,周期非常長,因此整個周期也降不下來,所以目前沒有非常好的方式來自動學好網絡結構。我自己也不是非常確信能夠學得好。
以上是CCF ADL 課程中孫劍博士的演講全文,附另7位演講大牛名單:
微軟亞洲研究院主任研究員鄭宇
地平線機器人創始人兼 CEO 余凱
360 首席科學家顏水成
華為諾亞方舟實驗室主任李航
思必馳創始人兼首席科學家俞凱
KDD China 主席楊強
中科視拓創始人兼 CTO 山世光