0
| 本文作者: 張棟 | 2019-07-06 07:17 | 專題:CCF-GAIR 2019 |

計算機視覺正在深刻改變著整個社會的信息資源使用觀念和方式。
7 月 12 - 7 月 14 日,CCF-GAIR 全球人工智能與機器人峰會將開設「 智慧城市·視覺智能 」專場。
本專場將全面圍繞“未來城市級視覺AI的發展方向”這一主題展開,其中,騰訊賈佳亞、曠視孫劍、商湯王曉剛、云從溫浩、澎思馬原、千視通胡大鵬等知名專家,將為從業者分享前瞻的技術研究 & 產品經營方法論。
而在去年 CCF-GAIR 的「計算機視覺論壇 」中,權龍、孫劍、林達華等人,講述了自己對計算機視覺研究和工程化落地的思考:
人工智能的核心是視覺,但現在的視覺仍局限在二維識別層面,未來三維視覺重建將會成為最重要的任務。
現在的計算機視覺就是基于卷積神經網絡而來,整個 CNN 的架構非常簡單,能做的事其實也沒那么多,它提取了高維的特征,然后要結合其它方法解決視覺問題。
如果你有足夠的數據并且能夠明確定義你想要的東西,CNN 的效果很好,但是它有沒有智能?其實沒有。
你說它蠢,它跟以前一樣蠢。它能識別出貓和狗,但我們要知道貓和狗的分類都是我們人類自己定義的,我們可以把貓和狗分開,也可以把復雜的狗類動物進行聚合和分類,這些東西本質上來說并不是客觀的,而是主觀的。
我們做計算機視覺研究的理想,是讓機器進行理解圖像。如何讓它進行理解?這非常的困難,直到現在也沒有人知道它怎么去進行理解。現在它能做的,只能做到認知。我們研究計算機視覺的目的是得到視覺特征,有了視覺特征后才能開展一系列工作。
為什么視覺特征如此重要?在語音識別領域,語音的特征已經定義得非常清晰——音素。但如果我們拿來一個圖像,問它最重要的視覺特征是什么,答案并不明確。大家知道圖像包含像素,但像素并不是真正的特征。像素只是一個數字化的載體,將圖像進行了數字化的表述。計算機視覺的終極目標就是尋找行之有效的視覺特征。
在這樣一個擁有視覺特征前提之下,計算機視覺也只有兩個現實目的,一個是識別,另一個是三維重建。
它們的英文單詞都以“re”做前綴,說明這是一個反向的問題。
計算機視覺不是一個很好定義(ill-posed)的問題,沒有一個完美的答案或方法。
這一輪的卷積神經網絡最本質的一件事是重新定義了計算機視覺的特征。在此之前,所有的特征都是人工設計的。今天CNN學來的東西,它學到特征的維度動輒幾百萬,在以前沒有這類網絡的情況下是根本做不到的。
縱使CNN的特征提取能力極其強,但是我們不要忘記建立在 CNN 基礎上的計算機視覺是單目識別,而人類是雙目。我們的現實世界是在一個三維空間,我們要和三維打交道。拿著二維圖像去做識別,這遠遠不夠。
雙目視覺對整個生物世界的等級劃分是非常嚴格的。大家知道馬的眼睛往外看,對角的部分才有可能得到一部分三維信息,但它的三維視角非常小,不像人類。魚的眼睛也是往兩邊看的,它的主要視線范圍是單目的,它能看到的雙目視區也是非常狹窄的一部分。
人類有兩只眼睛,通過兩只眼睛才能得到有深度的三維信息。當然,通過一只移動的眼睛,也可以獲得有深度的信息。
獲取深度信息的挑戰很大,它本質上是一個三角測量問題。第一步需要將兩幅圖像或兩只眼睛感知到的東西進行匹配,也就是識別。這里的“識別”和前面有所不同,前面提到的是有標注情況下的識別,這里的“識別”是兩幅圖像之間的識別,沒有數據庫。它不僅要識別物體,還要識別每一個像素,所以對計算量要求非常高。
在生物世界里,雙目視覺非常重要,哺乳動物都有雙目視覺,而且越兇猛的食肉的動物雙目重疊的區域越大,用雙目獲得的深度信息去主動捕捉獵物。吃草的或被吃的動物視覺單目視覺,視野很寬,只有識別而無深度,目的是被進攻時跑得快!
在這一輪的CNN之前,計算機視覺里面研究最多的是三維重建這樣的問題,在CNN之前有非常好的人工設計的視覺特征,這些東西本質上最早都是為三維重建而設計,例如SIFT特征。而在這之后的“識別”,只是把它放在一個沒有結構的圖像數據庫里去搜索而已。 由此可見,現代三維視覺是由三維重建所定義。CNN誕生之前,它曾是視覺發展的主要動力源于幾何,因為它的定義相對清晰。
計算機視覺中的三維重建包含三大問題:一、定位置。假如我給出一張照片,計算機視覺要知道這張照片是在什么位置拍的。二、多目。通過多目的視差獲取三維信息,識別每一個像素并進行匹配,進行三維重建。三、語義識別。完成幾何三維重建后,要對這個三維信息進行語義識別,這是重建的最終目的。
這里我再強調下,我們要把三維場景重新捕捉,但三維重建不是最終的目的,而是要把識別加進去,所以說最終的應用肯定要把三維重建和識別融為一體。
ResNet 為什么能夠工作呢?
到今天也沒有一個明確答案,當然有很多解釋。最直觀的解釋是說當你的非線性變換層數非常多,相鄰兩層變換的差別就非常小,與其直接學習這個映射,不如學習映射的變化,這樣的方式就讓整個學習過程,特別是訓練優化過程變得更容易。
還有一個解釋來自該論文的第二作者張祥雨,他認為 ResNet 的整個學習過程是一個由淺到深的動態過程,在訓練初期等效訓練一個淺層網絡,在訓練后期等效訓練一個深層網絡。
論文第一作者何愷明有另外一個更“科學”的解釋,他認為整個訓練過程相當于深度學習的梯度下降過程中,最為困難的梯度消失問題被 ResNet 解決了,該解釋也發表在 ECCV 2016 的一篇論文(Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. Identity Mapping in Deep Residual Networks. ECCV 2016.)中,并在該論文中第一次訓練了一個 1001 層的神經網絡。
還有一些同行提出的解釋。一種是把 ResNet 和 RNN 關聯起來,認為如果有 Weight Share, ResNet 可以看作是一種 RNN。還有一種解釋把 ResNet 看成是指數多個不同深度網絡的集成。用“集成”這個詞其實有些問題,因為一般我們做集成算法不聯合訓練,但這里面整個 ResNet 里指數多個網絡是聯合訓練的,所以很難定義它是不是集成。
我個人比較認同的一種解釋是 Iterative Refinement,它是說網絡初期的層學習表示,后期很多層不斷迭代和 Refine 這個表示。這跟人理解看圖識字很相似,一個不容易理解的東西你要看一會,是基于當前一些已看內容的理解,反復看才能看懂。
還有從從優化觀點的解釋,如果不用 ResNet 這種構造,系統的損失函數會非常坑坑洼洼和高低不平,所以很難優化。我們知道整個網絡訓練是非凸的優化問題,如果是這種不光滑的損失函數,訓練很難跳出局部極小;如果是上圖右邊使用 ResNet 的情況,就可以比較容易地達一個很好的局部極小。最近研究表明,局部極小區域的面積和平坦性和一個方法的推廣能力非常強相關。
多層 ResNet 學習高度非線性映射的能力非常強。去年,ResNet 成功應用于 DeepMind 的 AlphaGo Zero 系統中,用 一個40 或 80 層的網絡就可以學到從棋盤圖像到落子位置這樣一個高度復雜的映射,這非常讓人吃驚。
?2012 年開始有各種各樣的神經網絡結構出現。如果從計算平臺的角度看這些工作,大概可以分成三類:第一類是在“云”上,像 GoogleNet、ResNet,其目標是向著最高精度方向走,有 GPU、TPU 可以訓練非常大的模型,來探知我們的認知邊界;
第二類平臺是在“端”上,特別是一些嵌入式設備,這些設備上的計算能力,內存訪問都有限制,但很多真實的場景就是如此,那你怎么去做這上面的研究工作呢?谷歌在去年提出 MobileNet 運行在移動端設備上,曠視科技去年提出 ShuffleNet,其目標是說如何在一個給定計算量的設備上得到最好的效果。
一個網絡的最基本結構是多個 3×3 的卷積,ResNet 加了一個跳轉連接,我們在 ResNet 中還引入一個 Bottleneck 結構,先做 1×1,再做 3×3,再回到 1×1,這樣可以提高卷積的效率。
去年何愷明有一項工作叫 ResNeXt。

它在 3x3 的基礎上引入分組卷積的方法,可以很好地提高卷積的有效性;谷歌的 MobileNet 是一個 3x3 分層卷積的方式,每個層各卷各的,這種方式非常有效,特別是在低端設備上。ShuffleNet 結合分組卷積和分層卷積的思想,對 1×1 Conv 分組;但是如果只分組的話,組間的信息不會交換,這樣會影響特征學習,因此我們通過引入 Shuffle 操作,讓不同分組的信息更好地交換,然后做 3×3 的分層卷積,再回到 1×1 分組卷積,這就是 ShuffleNet 的核心思想。和其它方法相比,在相同的精度下,ShuffleNet 在真實設備上的速度要比 AlexNet 快 20 倍左右。
我們去年專為手機設計的 ShuffleNet,它在 CPU/ARM 上效果非常好;如果在 GPU 上,它的性能并不好,因為 CPU 和 GPU 的特性不太一樣,這里面有很多原因,比如卷積的設計,Group 卷積等等,我就不贅述了。

今年我們設計了 ShuffleNet v2,也就是第二版,拋棄分組卷積的思想,引入 Channel Split 和 Channel Shuffle 組合的新方法。這個方法把 Channel 先一分為二,并把每個分支用非常簡單的結構來做,然后在用 Shuffle 操作合并 Channel,這樣做的根源是我們在網絡設計中發現的一些基本指導原則,比如說我們需要平衡的卷積而不是稀疏的卷積,更加規整的卷積而不是零亂的卷積。
這項工作目前在 CPU 和 GPU 上都獲得了最好的精度和速度;不光在小模型,在大模型上同樣取得了非常好的效果,上圖最后一行是說 ShuffleNet v2 目前在計算量只有 12.7G Flops 情況下在 ImageNet 上取得了非常高的精度。
我們還需要將神經網絡運行在芯片上,這不光對網絡結構設計有要求,還要對網絡內部精度的表示做限制,現在最流行的方法是做低精度化,比如 BNN 和 XNOR Net,還有曠視科技提出的 DorefaNet。低精度方法是指神經網絡的權重或激活值用低精度表示,比如 1 位,2 位,4 位。如果可以用低精度表示兩個向量,那么卷積計算就可以通過芯片上非常簡單的位運算完成計算。
我們提出的 DorefaNet 是第一個對梯度也做量化的研究工作,從而可以讓我們在 FPGA 甚至 ASIC 上訓練。在這些設備上計算量是一方面,但是它的內存訪問限制更大,DorefaNet 這種方法可以做到更好。上圖是我們在 ImageNet 上得到的 1 位,2 位,4 位和 6 位量化精度下的最好分類結果。
上述分類問題網絡設計需要考慮不同的平臺,其它問題多是以分類為基礎,比如說檢測,上圖是檢測最近幾年的發展路程,從 R-CNN 到我們提出的 SPP-Net,到 Fast R-CNN,再到我們提出的 Faster R-CNN,它們都是先應用基礎分類網絡,然后構建不同的物體檢測框架。
再往下應該怎么做呢?今天我們是分平臺,根據平臺的特性設計不同的網絡。我們相信下一代會有一個“MetaNet”,統一解決各個平臺上的神經網絡設計和優化的問題。
深度學習開啟了計算機視覺發展的黃金時代,這幾年里計算機視覺取得了長足發展,但這種發展是粗放式的,是用數據和計算資源堆出來的,這種發展模式是否可以持續,值得深思。
隨著計算機視覺在準確率方面觸頂,行業應該尋求更多層面的發展。商湯主要嘗試從三大方面提升:一、提高計算資源的使用效率;二、降低數據資源的標注成本;三、提高人工智能的品質。
一、如何提高效率
目前大多數玩家現在走的是粗放型發展路線,是靠堆積數據和計算資源來換取高性能,這是資源而不是效率的競賽。
行業發展到今天,制定標準的公司賺取了大部分利潤,面對這種情況,未來該如何發展?
要回答這個問題,首先要回顧現在的模型和技術模式,看是否還有優化的空間,優化的原理非常簡單,就是把好鋼用在刀刃上。
兩年前商湯開始進入視頻領域,視頻對效率的要求非常高,因為視頻的數據量非常龐大,一秒鐘視頻有 24 幀,一分鐘就是 1500 幀,相當于一個中型數據庫,用傳統處理圖像的方式處理視頻顯然不合適。
2013、2014 年的時候,大部分視頻分析方法都比較簡單粗暴:把每一幀都拿出來跑一個卷積網絡,最后把它們綜合到一起進行判斷。
雖然說過去幾年計算資源發展非常快,但是 GPU 的顯存還是有限的,如果每一層都放到CNN里去跑,GPU 顯存只能容納 10 幀到 20 幀左右,一秒鐘的視頻就把 GPU 占滿了,沒辦法長時間對視頻進行分析,這是一種非常低效的模式。
視頻相鄰幀之間的重復度非常高,如果每一幀都跑一次,其實大量計算資源都被浪費了,意識到這種重復計算模式的低效后,他們對采樣方法進行了改變,改用稀疏采樣:無論多長的視頻,都劃分成等長的段落,每個段落只取一幀。
這樣一來就能在時間上對視頻形成完整覆蓋,分析出的結果自然具有較高的可靠性和準確性。
我們希望把這樣一個技術用在實際場景,得到實時性的物體檢測的框架。如果每一幀都是按剛才的方法處理,需要 140 毫秒,完全沒有辦法做到實時。但如果稀疏地去采,比如說每20幀采一次,中間的幀怎么辦呢?
大家可能想到用插值的方法把它插出來,但是他們發現這個方法對準確度影響很大,隔 10 幀采一次,中間的準確度差距很大。
在新提出的方法里,他們利用幀與幀之間相互的關系,通過一個代價小得多的網絡模塊,只需要花5毫秒,在幀與幀之間傳遞信息,就能很好地保持了檢測精度。
重新改變了做視頻分析的路徑之后,整體的代價就得到了大幅度的下降,這其中沒有什么新鮮的東西,網絡都是那些網絡,只是說重新去規劃了視頻分析的計算路徑,重新設計了整個框架。
自動駕駛需要對駕駛過程中的場景自動地進行理解和語義分割,這也是一個非常成熟的領域。但大家一直沒關注到點子上,大家關注的是分割的準確率,像素級的準確率,這是沒有意義的。我們真正做自動駕駛,關心的是人在你車前時,你能以多快的速度判斷出有個人在那里,然后做出緊急處理。所以在自動駕駛的場景,判斷的效率、判斷的速度是非常重要的。之前的方法處理一幀要 100 多毫秒,如果真有一個人出現在車前面,是來不及做出反應的。
利用剛才所說的方法,我們重新改造了一個模型,充分地使用了幀與幀之間的聯系,我們可以把每一幀處理的效能從 600 毫秒降低到 60 毫秒,大幅度地提高了這個技術對于突發情景響應的速度。
二,如何降低數據標注成本
人工智能是先有人工才有智能,有多少人工才有多少智能。人工智能有今天的繁榮,不能忘記背后默默奉獻的成千上萬的數據標注人員。今天商湯有近 800 名標注員在日夜不斷地標注數據,一些大公司的標注團隊更是多達上萬人,這也是一塊巨大的成本。
如何降低數據標注的成本,是我們每天都在思考的事情。既然很多東西沒法通過人工標注,是否可以換個思路,從數據、場景中尋找它本身就蘊含的標注信息?
我們去年的一項研究成果,嘗試了一種全新的學習方式。過去圖片的標注成本非常高,每張圖片不僅要標注,還要把目標物體框出來。比如學習識別動物,需要人工把動物標出來。我們小時候學習辨認動物的過程不是這樣的,不是老師給我一個帶框的圖片去學習,而是通過看《動物世界》學習的。這促使我產生了一個想法:能否讓模型通過看《動物世界》,把所有動物識別出來?紀錄片中有字幕,如果把它跟視覺場景聯系在一起,模型是否就能自動學習?為此我們設計了框架,建立起視覺與文本之間的聯系,最后得出了下圖中的結果。
我們在沒有任何標注和人工干預的情況下,靠看《動物世界》和《國家地理》雜志,能夠精確識別的幾十種動物。
此外,做人臉識別也需要標注大量人臉數據。其中有一些數據,比如我們的家庭相冊,這些相冊雖然沒有標注,但卻蘊含很多信息。
大家看下面這張圖,這是電影《泰坦尼克號》中的一些場景。

左上角這個場景,如果光看人臉很難認出這兩個人是誰。再看右上角第一個場景,我們可以認出左邊這個人是 Rose,但右邊這個穿西裝的人還是看不清。如果我們能識別出電影背后的場景,就會發現 Jack 和 Rose 經常出現在同一個場景。基于這種社交互動信息,我們可以推斷,那個穿黑西裝的男子可能是 Jack。這樣一來,在不用標注人臉的情況下,我們就獲取了大量有意義的數據。
我們還把這項技術用到了安防領域:一個人從深圳的街道這頭走到那頭,人臉圖像經常會發生變化,但只要能追蹤到他的軌跡,我們就能判斷所拍攝到的人臉屬于同一個人,這對訓練人臉模型是非常寶貴的信息。
三、如何提高人工智能質量
人工智能的最終目的是為生活帶來便利,提高生活質量。但最近幾年人工智能的發展好像步入了誤區,認為人工智能的質量和準確率掛鉤。我覺得人工智能的質量是多方面、多層次的,不僅僅是準確率。
給大家看幾個例子。“看圖說話”是近幾年特別火的領域,即向計算機展示一張圖片,讓它自動生成描述。下圖是我們用最新方法得出的結果。
大家發現,我們向這個最好的模型展示三張不同的圖片,它會說同一句話,這句話在標準測試中的得分非常高,沒有任何問題。但我們把它和人類的描述放在一起后發現,人類不是這樣說話的。人類描述一張圖片的時候,即使面對同一張圖片,不同人的表述是不一樣的。也就是說,人工智能在追求識別準確度的時候忽略了其他的品質,包括語言的自然性和圖片的特征。
為了解決這個問題,去年我們提出了一個新方法。它不再把內容描述看成翻譯問題,而是把它當做一個概率采樣問題。它承認描述的多樣性,承認每個人看到同一張圖片會說不同的話。我們希望把這個采樣過程學習出來。
我們再發散延伸一下:既然 AI 模型能生成一句話,那么是不是也能生成一段動作?下圖展示了我們的一項最新研究,很多AI公司都在做這方面的研究,讓 AI 生成一段生動的舞蹈。下面是一些簡單的動作,這些動作都是計算機自動生成的,不是我們用程序描述出來的。

最后,對前面的分享做一個總結。過去幾年,人工智能和深度學習都取得了突飛猛進的發展,這種發展既體現在標準數據集上的準確率提升,也體現在商業場景的落地。但回顧這一段發展歷程,我們發現,朝著準確率高歌猛進的過程中我們也遺忘了很多東西。我們的效率是否足夠高?我們是否在透支數據標注的成本?我們訓練出的模型是否能夠滿足現實生活對品質的要求?從這些角度來看,我覺得我們才剛剛起步。雖然我們實驗室和世界上許多其他實驗室取得了一些重要進展,但我們仍然處在起步階段,前面還有很長的路要走。雷鋒網
計算機視覺技術應用路上,道阻且長,尚有無數未知黑暗森林亟待探索。
歷史車輪滾滾勢不可擋,每隔一段時間都會有新的技術突破。
一年后,“MetaNet ”式能夠統一解決各個平臺上的神經網絡設計和優化問題的框架,是否有進展?技術的迭代又匹配了哪些城市場景?而這是否又會帶來新一輪的市場洗牌?
六天后,雷鋒網AI掘金志將帶你共同見證「智慧城市·視覺智能」的未來,尋找問題的最優解。雷鋒網


雷峰網原創文章,未經授權禁止轉載。詳情見轉載須知。