計算機視覺技術的車輛「檢測」與「識別」是怎麼做的?

看【商湯科技】(SenseTime | 商湯科技)、【格林深瞳】(DeepGlint-在線測試)、【圖森】( TuSimple Cars Recognition)、【依圖】(依圖-成功案例)網站上有車輛檢測與識別的介紹,識別可以精確到品牌車系,甚至更準確的信息,想問下大神是怎麼做的?

【商湯】從這個角度居然識別出來「賓士 E240

【格林深瞳】識別出了品牌、顏色,好像還有年代。

【圖森】提供了在線測試,確實準確率挺高。

【依圖】在惡劣天氣條件下依然能準確識別:

補充一個:

細分一下問題

(1)車輛的檢測或者說定位怎麼做?

(2)車輛的品牌、車系識別怎麼做?

(3)數據怎麼得到的?


首先,希望大家先玩玩各家demo再來評論。

關注這個問題有一段時間了,本來不想摻和這個問題,不過看到下面答案里各種"專家"和"業內人士"胸有成竹地胡說八道,在這個是個媒體就逢Deep就是AlphaGo的時代,覺得還是有責任站出來說兩句,認真科普一下這個問題。

這是一個什麼問題?這麼多位答主里只有一位提到了正確答案,即Fine-Grained Classification。這個問題和普通分類問題最大的區別在於在Fine-Grained Classification中,要分類的類別往往只是有細微的差異,而不像在普通分類問題中區分桌子,椅子,汽車這樣的大類。所以這個問題比普通的分類問題更加困難。在Deep Leaning史前時代,說實話並沒有什麼可靠的方法可以準確分類,但是在有了CNN這種利器下,這個問題確實可以算作部分解決了。在基礎CNN模型上做對每一個步驟加上有限的幾個小改動就能取得還不錯的結果。針對Fine Grain的方法更在於尋求模型的可解釋性,而非單純的性能提升。

然而,故事總不是這麼完美的。學術問題和實際生活中的問題總是有差異的。最實際的一個問題是,誰去給你標這麼多數據?普通的桌子椅子也就算了,對於Fine Grained問題,2000多類汽車品牌,訓練一個好的標註員需要花費多大精力和財力?標註員出錯的幾率又有多少?然而大家都知道Deep Learning的結果和數據量成正比。那麼如何使用相對廉價,但是雜訊巨大的互聯網數據訓練模型?如何將這樣訓練出的一個模型遷移到一個實際應用中的場景中去?這都是很實際,然而在我們的工作中最常見的問題。

再回到我們的這個Demo,這其實是我們在之前廣告業務中做的打垂直標籤的一個嘗試,是整個廣告系統中的一部分,我們會針對客戶的各種需求定製各種垂直分類體系。這個demo是和我們一位優秀的實習生兩個月的工作成果,在這個過程中我們也發現了一些很有趣的現象和方法,並將這些寫了相關的論文和專利,也算是這個project的一個副產品吧。

很多人還提到Vehicle Verification這個問題,不得不說這是另外一個問題,暫且不表。不過,借某位答主的說法,我們這樣的"二線梯隊"的實習生兩個星期做的一些東西也在國內某Vehicle Verification比賽上拿了個第一,也算是這個project進一步的拓展和延伸吧。

最後,這個demo其實只是我們放出來給大家娛樂一下的一個玩具,只是之前一點點微小的工作,繼續預告一下,更有意思更重要的demo會在9月中放出哦,大家敬請期待~

另,我們長期招收CV和Deep方向的實習生和全職員工,有意者聯繫我哈~


各家演算法的核心部分應該都差不多,都是deep一頓跑。但互聯網數據不像學術數據集這麼乾淨。親眼見證過小夥伴們被新浪圖片數據噪音大 搞得夜不能寐的情形。自己覺得工程上能不能解決這三問題是關鍵:

1.如何用最少的訓練數據達到相同的訓練效果,畢竟人肉也要錢。並且電費也要錢,借用xd的一句話,氣候變暖,人人有責。

2.系統如何與數據集解藕,不能換個服裝識別,代碼就得重寫吧。別家不了解,相信圖森做得很棒。

3.能不能在工程中發現一些學術界無法發現的trick,並在模型基本都是deep的情況下領先對手一個身位。稍微泄漏一下,圖森下半年的demo中極有可能在lane detection,eye tracking等子問題上放個大衛星。

別的公司不了解,圖森在detection, recognition的功力還是很深厚的。當然,你要了解我之前在公司時是如何跟小夥伴們天天黑老闆的,就知道這不是圖森吹。據說,現在圖森福利越來越好,公司美女顏值水平已經是sd最高,老闆也是老司機啊。


題主的問題是如何能達到這種識別度的,圖像識別有多種方案,這個問題可以轉化為在現有圖像分類器精度一定的情況下,如何提高分類的精確度或者說準確率?這裡我給出兩種方案。

1.人工框定局部圖像,然後識別。

比如我去框定,汽車的車燈,汽車的前臉,汽車輪轂等,然後用 cnn或 deep cnn 或what ever其他的分類器做這些的分類,對於分類器來說輸入是汽車的車燈+汽車的前臉+汽車輪轂,而不是整張圖片。分類器再從車燈前臉等提取高級特徵,從而得到一個分類模型。

2.不做局部變換,做圖片整體識別。但是做分級或是分層。

首先,我們訓練第一個分類器,它只針對汽車和非汽車進行分類,標記了car 和 other。這一步要求儘可能的廣,涵蓋生活中常見的圖片,力求98%以上的準確率,我們每個分類用了2w張圖片,實際上能達到99.5%的準確率。

接著,對於汽車我們做品牌分類器,我們只對汽車所屬的品牌進行分類,不對細分的子品牌分類。這一步每一類我們人工標記5000張圖片,輸入是第一步的輸出,準確率能達到96%以上。

最後,我們對每品牌的汽車進行車型分類,這個要求比較高,涉及到一些未發表的研究成果,就不再此公開了,這一層我們的識別率在94%左右。

這樣你會得到一個0.98*0.96*0.94~0.88的識別率,當然這樣還沒完,對於工業的要求,你可以提高概率的門檻,比如說正常0.9以上我認為這是一輛車了,提高到0.99以上,會略掉一些目標,但會提高準確率。這樣我們將得到一個90%以上的對車型的一個分類器。

你還可以結合很多其他方法,進一步提高,比如可以結合第一步。最後我們的車型的識別精度是93% 這個結果是在1w張圖片,各種環境下的得到結果,說句不自誇的話,已經算業界領先了。

當然還可以提高,你可以用opencv先做一些圖片的變換,比如對光線的處理,去噪等等,這樣會提高複雜環境的圖片的識別精度。不想做也可以,你可以多找些複雜光線圖片餵給deep cnn就ok了,關鍵是你能收集這麼多。

================================================================

說說我們的實際的工作:

對於第一個模型你可以輕易的分類出車與非車:

比如:

或這樣

對於第二個模型:你能分類得到具體的車輛品牌,比如 下面的圖片就是被成功識別成大眾,這個場景其實已經比較暗了。沒有做任何圖像變換,沒有做局部提亮,直接訓練後,就能得到這個結果。

再比如,我們還訓練了內飾圖片,通過內飾圖片準確識別出品牌Audi

當然如果你某一部分的訓練集不夠多的話,也會出現下面的圖片識別錯誤的情況,錯誤識別成了保時捷:

對於局部圖片,我們是這樣提取的:

先寫到這裡吧,希望對你有幫助。


事實上 現在學界有不少人在做 車輛的re-id ,就是在不通過車牌的情況下找出 不同時間出現的同一輛車


很多人沒有講到點上,這個問題主要是數據問題。模型則是其次的。

我想了下幾個方法

1.根據車牌找出車身位置 進行一些特徵工程

2.如果是整車而言的話,是個細粒度分類問題。

可以看一下近年來的相關進展。

另外我想了個簡單的思路就是對汽車3d 建模,然後結合自然場景渲染出各個角度的樣本。其實工作量還是比較大的。


大家可以關注下今年2016 ICME Best Student Paper,以及該團隊在ECCV 2016的系列工作Vehicle Reidentification


很少在知乎上發表評論,但是由於自己正在做這個,算有點了解吧。

先說說格林的吧,我們使用了格林的sdk,實實在在做過評測,說實話格林做的確實牛逼,比一些所謂的巨頭公司好太多了,在各種卡扣數據圖像上精度可以達到95%上下,在一些複雜場景下比如街景啊 精度就不是那麼理想了,但至少在我們測試過的好幾家自稱可以適應各種場景的,格林是最好的。

其他兩家的產品沒用過,其實說白了也很好比較,現場PK不就知道了。

最後說一句,做這個關鍵是數據 數據啊 只是演算法 技術上沒有什麼多大的難點,覺得目前的深度學習技術完全可以應付了


任何分類問題,其實本質上都是一樣的

我們從宏觀上說,這種問題是「輸入-輸出」的問題

輸入的,這裡是個圖片,輸出的是你想要的車牌啊,車品牌啊,具體位置啊

#####

而至於細化下來

其實也就是「特徵描述+分類」

方法上沒什麼特別神奇的地方。

#####

分類問題現在再細分一下,分為「籠統分類」以及「細分類」

籠統分類也就是一般的classification,細化分類是fine-grain classification

前者是在大類別分類,比如是貓還是狗

而後者則是在一個大類裡面分類,比如是什麼貓

#####

但是無論是籠統分類,還是細化分類,描述特徵依然是最關鍵的一步

@機智的大群主

已經說的很清楚了,現在主要就是用深度學習去處理這樣的問題

深度學習,是一種自髮式的特徵尋找方法

我舉一個不是特別恰當的例子哈

比如有一個盤子,盤子裡面有5種水果:蘋果(1)、梨子(2)、香蕉(3)、西瓜(4)、桔子(5)

你可以去詢問別人:這個水果是不是(1)~(5)

會有一個人告訴你:(a)你回答錯了,但是很接近;

(b)你回答錯了,錯的很遠;(c)你回答對了

比如,你拿起了蘋果(1),然後問他:這是桔子么?

他會說:你錯了,錯的很遠。

那麼接下來,你肯定就會修正你的答案,比如你會問:這是香蕉(2)么?

他會說:你錯了,但是很接近

然後經過幾輪問題之後,最終你猜測的答案和正確答案一致了

而當,有人又拿了一個蘋果過來的時候,你在這5個類別里,更傾向於說他拿的是一個蘋果。

#####

上面介紹了個不是很嚴謹的深度學習的例子

也就是說深度學習學習到的東西並不是人為設置的,人只會告訴機器最終答案是不是正確,機器則是一輪又一輪的修改自己的預測,直到誤差非常小為止

而這個過程裡面,機器就已經「學習」到了如何去判斷這些東西

因為深度學習裡面的參數非常的多

現在傳統的卷積神經網路來說

它可能會包含3個以上的卷積層(conv layer),每一個卷積層都會有數量很多的濾波器(filter)

每一個濾波器都相當於是一個有很多參數的函數

然後再卷積層之後,還有全連接層(full connect layer),全連接層也有大量的參數

#####

最終,一個常見的深度學習網路,會包含有百萬級的參數

也就是說,輸入一張圖片到這個網路裡面,這張圖片是經過了這百萬級的參數的計算,最後才會告訴你一個結果

而這些參數,就是事先用大量的例子訓練出來的。。。

#####

說到這裡,大家心裡應該都有數了

為什麼說「大數據」,就是因為數據量越大的話,計算機可能「認識」的東西就會越多

等到了這個時候,如果你訓練過一個車子360度的照片,你還發愁計算機認不出這輛車么?

當然了,以現在的處理情況來說,會加入一些多視角的匹配的,具備一定的推斷能力,甚至可以從正面就推測出你的側面


其實不管是商湯、圖森還是格靈深瞳,據大群主所知,各家使用的基本上使用的還是基於深度學習的圖像識別與物體檢測。因此推薦題主看看,慧眼科技研發總監李漢曦老師在硬創公開課中,關於計算機視覺和深度學習的講解。

另外我們專欄內還有商湯科技CTO曹旭東對計算機視覺趨勢的解讀為什麼深度學習幾乎成了計算機視覺研究的標配? - 硬創公開課 - 知乎專欄

李漢曦,慧眼科技研發總監,澳大利亞國立大學博士;曾任澳大利亞國家信息通信公司(NICTA)任高級研究員;人臉識別,物體檢測,物體跟蹤、深度學習方面的專家,在TPAMI,TIP, TNNLS和Pattern Recognition等權威期刊,以及CVPR,ECCV,BMVC, ACCV等領域內重要會議發表過有影響力的論文;現為澳大利亞格里菲斯大學客座研究員,江西師範大學特聘教授。

人工智慧是人類一個非常美好的夢想,跟星際漫遊和長生不老一樣。我們想製造出一種機器,使得它跟人一樣具有一定的對外界事物感知能力,比如看見世界。

在上世紀50年代,數學家圖靈提出判斷機器是否具有人工智慧的標準:圖靈測試。即把機器放在一個房間,人類測試員在另一個房間,人跟機器聊天,測試員事先不知道另一房間里是人還是機器 。經過聊天,如果測試員不能確定跟他聊天的是人還是機器的話,那麼圖靈測試就通過了,也就是說這個機器具有與人一樣的感知能力。

但是從圖靈測試提出來開始到本世紀初,50多年時間有無數科學家提出很多機器學習的演算法,試圖讓計算機具有與人一樣的智力水平,但直到2006年深度學習演算法的成功,才帶來了一絲解決的希望。

眾星捧月的深度學習

深度學習在很多學術領域,比非深度學習演算法往往有20-30%成績的提高。很多大公司也逐漸開始出手投資這種演算法,並成立自己的深度學習團隊,其中投入最大的就是谷歌,2008年6月披露了谷歌腦項目。2014年1月谷歌收購DeepMind,然後2016年3月其開發的Alphago演算法在圍棋挑戰賽中,戰勝了韓國九段棋手李世石,證明深度學習設計出的演算法可以戰勝這個世界上最強的選手。

在硬體方面,Nvidia最開始做顯示晶元,但從2006及2007年開始主推用GPU晶元進行通用計算,它特別適合深度學習中大量簡單重複的計算量。目前很多人選擇Nvidia的CUDA工具包進行深度學習軟體的開發。

微軟從2012年開始,利用深度學習進行機器翻譯和中文語音合成工作,其人工智慧小娜背後就是一套自然語言處理和語音識別的數據演算法。

百度在2013年宣布成立百度研究院,其中最重要的就是百度深度學習研究所,當時招募了著名科學家余凱博士。不過後來余凱離開百度,創立了另一家從事深度學習演算法開發的公司地平線。

Facebook和Twitter也都各自進行了深度學習研究,其中前者攜手紐約大學教授Yann Lecun,建立了自己的深度學習演算法實驗室;2015年10月,Facebook宣布開源其深度學習演算法框架,即Torch框架。Twitter在2014年7月收購了Madbits,為用戶提供高精度的圖像檢索服務。

前深度學習時代的計算機視覺

互聯網巨頭看重深度學習當然不是為了學術,主要是它能帶來巨大的市場。那為什麼在深度學習出來之前,傳統演算法為什麼沒有達到深度學習的精度?

在深度學習演算法出來之前,對於視覺演算法來說,大致可以分為以下5個步驟:特徵感知,圖像預處理,特徵提取,特徵篩選,推理預測與識別。早期的機器學習中,佔優勢的統計機器學習群體中,對特徵是不大關心的。

我認為,計算機視覺可以說是機器學習在視覺領域的應用,所以計算機視覺在採用這些機器學習方法的時候,不得不自己設計前面4個部分。

但對任何人來說這都是一個比較難的任務。傳統的計算機識別方法把特徵提取和分類器設計分開來做,然後在應用時再合在一起,比如如果輸入是一個摩托車圖像的話,首先要有一個特徵表達或者特徵提取的過程,然後把表達出來的特徵放到學習演算法中進行分類的學習。

過去20年中出現了不少優秀的特徵運算元,比如最著名的SIFT運算元,即所謂的對尺度旋轉保持不變的運算元。它被廣泛地應用在圖像比對,特別是所謂的structure from motion這些應用中,有一些成功的應用例子。另一個是HoG運算元,它可以提取物體,比較魯棒的物體邊緣,在物體檢測中扮演著重要的角色。

這些運算元還包括Textons,Spin image,RIFT和GLOH,都是在深度學習誕生之前或者深度學習真正的流行起來之前,佔領視覺演算法的主流。

幾個(半)成功例子

這些特徵和一些特定的分類器組合取得了一些成功或半成功的例子,基本達到了商業化的要求但還沒有完全商業化。

  • 一是八九十年代的指紋識別演算法,它已經非常成熟,一般是在指紋的圖案上面去尋找一些關鍵點,尋找具有特殊幾何特徵的點,然後把兩個指紋的關鍵點進行比對,判斷是否匹配。

  • 然後是2001年基於Haar的人臉檢測演算法,在當時的硬體條件下已經能夠達到實時人臉檢測,我們現在所有手機相機里的人臉檢測,都是基於它或者它的變種。

  • 第三個是基於HoG特徵的物體檢測,它和所對應的SVM分類器組合起來的就是著名的DPM演算法。DPM演算法在物體檢測上超過了所有的演算法,取得了比較不錯的成績。

但這種成功例子太少了,因為手工設計特徵需要大量的經驗,需要你對這個領域和數據特別了解,然後設計出來特徵還需要大量的調試工作。說白了就是需要一點運氣。

另一個難點在於,你不只需要手工設計特徵,還要在此基礎上有一個比較合適的分類器演算法。同時設計特徵然後選擇一個分類器,這兩者合併達到最優的效果,幾乎是不可能完成的任務。

仿生學角度看深度學習

如果不手動設計特徵,不挑選分類器,有沒有別的方案呢?能不能同時學習特徵和分類器?即輸入某一個模型的時候,輸入只是圖片,輸出就是它自己的標籤。比如輸入一個明星的頭像,出來的標籤就是一個50維的向量(如果要在50個人里識別的話),其中對應明星的向量是1,其他的位置是0。

這種設定符合人類腦科學的研究成果。

1981年諾貝爾醫學生理學獎頒發給了David Hubel,一位神經生物學家。他的主要研究成果是發現了視覺系統信息處理機制,證明大腦的可視皮層是分級的。他的貢獻主要有兩個,一是他認為人的視覺功能一個是抽象,一個是迭代。抽象就是把非常具體的形象的元素,即原始的光線像素等信息,抽象出來形成有意義的概念。這些有意義的概念又會往上迭代,變成更加抽象,人可以感知到的抽象概念。

像素是沒有抽象意義的,但人腦可以把這些像素連接成邊緣,邊緣相對像素來說就變成了比較抽象的概念;邊緣進而形成球形,球形然後到氣球,又是一個抽象的過程,大腦最終就知道看到的是一個氣球。

模擬人腦識別人臉,也是抽象迭代的過程,從最開始的像素到第二層的邊緣,再到人臉的部分,然後到整張人臉,是一個抽象迭代的過程。

再比如看到圖片中的摩托車,我們可能在腦子裡就幾微秒的時間,但是經過了大量的神經元抽象迭代。對計算機來說最開始看到的根本也不是摩托車,而是RGB圖像三個通道上不同的數字。

所謂的特徵或者視覺特徵,就是把這些數值給綜合起來用統計或非統計的形式,把摩托車的部件或者整輛摩托車表現出來。深度學習的流行之前,大部分的設計圖像特徵就是基於此,即把一個區域內的像素級別的信息綜合表現出來,利於後面的分類學習。

如果要完全模擬人腦,我們也要模擬抽象和遞歸迭代的過程,把信息從最細瑣的像素級別,抽象到「種類」的概念,讓人能夠接受。

卷積的概念

計算機視覺里經常使卷積神經網路,即CNN,是一種對人腦比較精準的模擬。

什麼是卷積?卷積就是兩個函數之間的相互關係,然後得出一個新的值,他是在連續空間做積分計算,然後在離散空間內求和的過程。實際上在計算機視覺裡面,可以把卷積當做一個抽象的過程,就是把小區域內的信息統計抽象出來。

比如,對於一張愛因斯坦的照片,我可以學習n個不同的卷積和函數,然後對這個區域進行統計。可以用不同的方法統計,比如著重統計中央,也可以著重統計周圍,這就導致統計的和函數的種類多種多樣,為了達到可以同時學習多個統計的累積和。

上圖中是,如何從輸入圖像怎麼到最後的卷積,生成的響應map。首先用學習好的卷積和對圖像進行掃描,然後每一個卷積和會生成一個掃描的響應圖,我們叫response map,或者叫feature map。如果有多個卷積和,就有多個feature map。也就說從一個最開始的輸入圖像(RGB三個通道)可以得到256個通道的feature map,因為有256個卷積和,每個卷積和代表一種統計抽象的方式。

在卷積神經網路中,除了卷積層,還有一種叫池化的操作。池化操作在統計上的概念更明確,就是一個對一個小區域內求平均值或者求最大值的統計操作。

帶來的結果是,如果之前我輸入有兩個通道的,或者256通道的卷積的響應feature map,每一個feature map都經過一個求最大的一個池化層,會得到一個比原來feature map更小的256的feature map。

在上面這個例子里,池化層對每一個2X2的區域求最大值,然後把最大值賦給生成的feature map的對應位置。如果輸入圖像是100×100的話,那輸出圖像就會變成50×50,feature map變成了一半。同時保留的信息是原來2X2區域裡面最大的信息。

操作的實例:LeNet網路

Le顧名思義就是指人工智慧領域的大牛Yann Lecun。這個網路是深度學習網路的最初原型,因為之前的網路都比較淺,它較深的。LeNet在98年就發明出來了,當時Lecun在ATT的實驗室,他用這一網路進行字母識別,達到了非常好的效果。

怎麼構成呢?輸入圖像是32×32的灰度圖,第一層經過了一組卷積和,生成了6個28X28的feature map,然後經過一個池化層,得到得到6個14X14的feature map,然後再經過一個卷積層,生成了16個10X10的卷積層,再經過池化層生成16個5×5的feature map。

從最後16個5X5的feature map開始,經過了3個全連接層,達到最後的輸出,輸出就是標籤空間的輸出。由於設計的是只要對0到9進行識別,所以輸出空間是10,如果要對10個數字再加上26個大小字母進行識別的話,輸出空間就是62。62維向量里,如果某一個維度上的值最大,它對應的那個字母和數字就是就是預測結果。

壓在駱駝身上的最後一根稻草

從98年到本世紀初,深度學習興盛起來用了15年,但當時成果泛善可陳,一度被邊緣化。到2012年,深度學習演算法在部分領域取得不錯的成績,而壓在駱駝身上最後一根稻草就是AlexNet。

AlexNet由多倫多大學幾個科學家開發,在ImageNet比賽上做到了非常好的效果。當時AlexNet識別效果超過了所有淺層的方法。此後,大家認識到深度學習的時代終於來了,並有人用它做其它的應用,同時也有些人開始開發新的網路結構。

其實AlexNet的結構也很簡單,只是LeNet的放大版。輸入是一個224X224的圖片,是經過了若干個卷積層,若干個池化層,最後連接了兩個全連接層,達到了最後的標籤空間。

去年,有些人研究出來怎麼樣可視化深度學習出來的特徵。那麼,AlexNet學習出的特徵是什麼樣子?在第一層,都是一些填充的塊狀物和邊界等特徵;中間的層開始學習一些紋理特徵;更高接近分類器的層級,則可以明顯看到的物體形狀的特徵。

最後的一層,即分類層,完全是物體的不同的姿態,根據不同的物體展現出不同姿態的特徵了。

可以說,不論是對人臉,車輛,大象或椅子進行識別,最開始學到的東西都是邊緣,繼而就是物體的部分,然後在更高層層級才能抽象到物體的整體。整個卷積神經網路在模擬人的抽象和迭代的過程。

為什麼時隔20年捲土重來?

我們不禁要問:似乎卷積神經網路設計也不是很複雜,98年就已經有一個比較像樣的雛形了。自由換演算法和理論證明也沒有太多進展。那為什麼時隔20年,卷積神經網路才能捲土重來,佔領主流?

這一問題與卷積神經網路本身的技術關係不太大,我個人認為與其他一些客觀因素有關。

  • 首先,卷積神經網路的深度太淺的話,識別能力往往不如一般的淺層模型,比如SVM或者boosting。但如果做得很深,就需要大量數據進行訓練,否則機器學習中的過擬合將不可避免。而2006及2007年開始,正好是互聯網開始大量產生各種各樣的圖片數據的時候。

  • 另外一個條件是運算能力。卷積神經網路對計算機的運算要求比較高,需要大量重複可並行化的計算,在當時CPU只有單核且運算能力比較低的情況下,不可能進行個很深的卷積神經網路的訓練。隨著GPU計算能力的增長,卷積神經網路結合大數據的訓練才成為可能。

  • 最後一點就是人和。卷積神經網路有一批一直在堅持的科學家(如Lecun)才沒有被沉默,才沒有被海量的淺層方法淹沒。然後最後終於看到卷積神經網路佔領主流的曙光。

深度學習在視覺上的應用

計算機視覺中比較成功的深度學習的應用,包括人臉識別,圖像問答,物體檢測,物體跟蹤

人臉識別:

這裡說人臉識別中的人臉比對,即得到一張人臉,與資料庫里的人臉進行比對;或同時給兩張人臉,判斷是不是同一個人。

這方面比較超前的是湯曉鷗教授,他們提出的DeepID演算法在LWF上做得比較好。他們也是用卷積神經網路,但在做比對時,兩張人臉分別提取了不同位置特徵,然後再進行互相比對,得到最後的比對結果。最新的DeepID-3演算法,在LWF達到了99.53%準確度,與肉眼識別結果相差無幾。

圖片問答問題:

這是2014年左右興起的課題,即給張圖片同時問個問題,然後讓計算機回答。比如有一個辦公室靠海的圖片,然後問「桌子後面有什麼」,神經網路輸出應該是「椅子和窗戶」。

這一應用引入了LSTM網路,這是一個專門設計出來具有一定記憶能力的神經單元。特點是,會把某一個時刻的輸出當作下一個時刻的輸入。可以認為它比較適合語言等,有時間序列關係的場景。因為我們在讀一篇文章和句子的時候,對句子後面的理解是基於前面對詞語的記憶。

圖像問答問題是基於卷積神經網路和LSTM單元的結合,來實現圖像問答。LSTM輸出就應該是想要的答案,而輸入的就是上一個時刻的輸入,以及圖像的特徵,及問句的每個詞語。

物體檢測問題:

Region CNN

深度學習在物體檢測方面也取得了非常好的成果。2014年的Region CNN演算法,基本思想是首先用一個非深度的方法,在圖像中提取可能是物體的圖形塊,然後深度學習演算法根據這些圖像塊,判斷屬性和一個具體物體的位置。

為什麼要用非深度的方法先提取可能的圖像塊?因為在做物體檢測的時候,如果你用掃描窗的方法進行物體監測,要考慮到掃描窗大小的不一樣,長寬比和位置不一樣,如果每一個圖像塊都要過一遍深度網路的話,這種時間是你無法接受的。

所以用了一個折中的方法,叫Selective Search。先把完全不可能是物體的圖像塊去除,只剩2000左右的圖像塊放到深度網路裡面判斷。那麼取得的成績是AP是58.5,比以往幾乎翻了一倍。有一點不盡如人意的是,region CNN的速度非常慢,需要10到45秒處理一張圖片。

Faster R-CNN方法

而且我在去年NIPS上,我們看到的有Faster R-CNN方法,一個超級加速版R-CNN方法。它的速度達到了每秒七幀,即一秒鐘可以處理七張圖片。技巧在於,不是用圖像塊來判斷是物體還是背景,而把整張圖像一起扔進深度網路里,讓深度網路自行判斷哪裡有物體,物體的方塊在哪裡,種類是什麼?

經過深度網路運算的次數從原來的2000次降到一次,速度大大提高了。

Faster R-CNN提出了讓深度學習自己生成可能的物體塊,再用同樣深度網路來判斷物體塊是否是背景?同時進行分類,還要把邊界和給估計出來。

Faster R-CNN可以做到又快又好,在VOC2007上檢測AP達到73.2,速度也提高了兩三百倍。

YOLO

去年FACEBOOK提出來的YOLO網路,也是進行物體檢測,最快達到每秒鐘155幀,達到了完全實時。它讓一整張圖像進入到神經網路,讓神經網路自己判斷這物體可能在哪裡,可能是什麼。但它縮減了可能圖像塊的個數,從原來Faster R-CNN的2000多個縮減縮減到了98個。

同時取消了Faster R-CNN裡面的RPN結構,代替Selective Search結構。YOLO裡面沒有RPN這一步,而是直接預測物體的種類和位置。

YOLO的代價就是精度下降,在155幀的速度下精度只有52.7,45幀每秒時的精度是63.4。

SSD

在arXiv上出現的最新演算法叫Single Shot MultiBox Detector,即SSD。

它是YOLO的超級改進版,吸取了YOLO的精度下降的教訓,同時保留速度快的特點。它能達到58幀每秒,精度有72.1。速度超過Faster R-CNN 有8倍,但達到類似的精度。

物體跟蹤

所謂跟蹤,就是在視頻裡面第一幀時鎖定感興趣的物體,讓計算機跟著走,不管怎麼旋轉晃動,甚至躲在樹叢後面也要跟蹤。

深度學習對跟蹤問題有很顯著的效果。DeepTrack演算法是我在澳大利亞信息科技研究院時和同事提出的,是第一在線用深度學習進行跟蹤的文章,當時超過了其它所有的淺層演算法。

今年有越來越多深度學習跟蹤演算法提出。去年十二月ICCV 2015上面,馬超提出的Hierarchical Convolutional Feature演算法,在數據上達到最新的記錄。它不是在線更新一個深度學習網路,而是用一個大網路進行預訓練,然後讓大網路知道什麼是物體什麼不是物體。

將大網路放在跟蹤視頻上面,然後再分析網路在視頻上產生的不同特徵,用比較成熟的淺層跟蹤演算法來進行跟蹤,這樣利用了深度學習特徵學習比較好的好處,同時又利用了淺層方法速度較快的優點。效果是每秒鐘10幀,同時精度破了記錄。

最新的跟蹤成果是基於Hierarchical Convolutional Feature,由一個韓國的科研組提出的MDnet。它集合了前面兩種深度演算法的集大成,首先離線的時候有學習,學習的不是一般的物體檢測,也不是ImageNet,學習的是跟蹤視頻,然後在學習視頻結束後,在真正在使用網路的時候更新網路的一部分。這樣既在離線的時候得到了大量的訓練,在線的時候又能夠很靈活改變自己的網路。

----------------------------------我是機智的分割線------------------------------------

如果想有更多技術交流也歡迎參與我們的技術交流活動。

搜索公眾號ycopen就能找到大群主我啦,掃描二維碼(二維碼在這裡)查看喔~


匿名了,怕被逮出來。首先,這不全是深度學習做出來的,最後的幾點準確率,都是拼業務或者在數據上做手腳。這個識別不是直接一次性出結果的,是一層一層下來的,最開始那幾層如果準確率不高,後面就不用考慮了,所以最開始幾層幾乎是一百的準確率,這裡面還有個錯誤回查的策略,假設基於第一層的結果,再第三層出現的錯誤比較大,就再會回來看看,還有好多,不一一介紹,並不是簡單的一個模型就搞定的。對於工業界的應用來講,解決問題,才是目的。


這幾家公司,除了依圖做過車型識別,其他公司都是扯。依圖被某家公司打的很慘,基本放棄車型,轉做人臉了。各位大神說了很多,我就提一個,效率問題你們考慮了么。很多地方一天幾百萬上千萬的數據量,你們用多少伺服器去識別?不考慮實際問題,不把產品做到真正落地,不能真正好用去解決實際問題,其他的都是蝦扯蛋


做得好的就四家,依圖、曠視、商湯、格靈,圖森這種屬於二線梯隊,前四家我都已經在項目中見過了,圖森的還在襁褓實驗中,不在一個level。當然,題主忽略了華富睿智,現在業內數一數二,做的最早也扎的最深,不過前面提到的四家現在進來分餅,華富後勁兒估計不大。


基於大數據的基礎。


真的好准,很多冷門老車也識別出來了


應該有用到特徵工程


個人感覺車型識別應該會比general的物體識別要簡單吧。因為汽車本身是rigid object,它的外觀變化無非是角度和光照的差別。而且同一車型外觀完全一樣,所以訓練集的inter class variance不是很大。

對比general的物體識別問題,比如我有一個類是貓,貓會有各種不同的品種,有不同的角度,還有各種姿態動作,訓練樣本之間千差萬別,要想學出一個general的模型並且不會過擬合其實是很困難的。

所以我猜直接用一般的cnn訓練應該就可以得到比較好的結果。還可以通過先用一個分類器識別出車的角度,對每個角度的樣本單獨訓練一個車型分類器來提高準確率。

本人菜鳥,純屬猜測,不對的地方請更正,輕噴


圖像識別就能做了吧,車輛標誌的通常出現在固定的區域,檢測該區域信息,然後跟樣本庫進行匹配


我來說另一個方面的吧。。。

每個方法的結果看起來很準確,這沒什麼問題。

但是我們還要注意到 圖中其他好多車也是沒檢測出來啊。。

這就關係到深度學習的特性:數據!我們要模型檢測哪些物體就得提供該物體的大量數據,而顯然對應現實中那麼多車型不可能有那麼大的數據集,也沒必要。

而關於物體檢測,現在學術界的主流方法有兩種(大致列一下 不敢班門弄斧了):

1、以RCNN為代表的CNN特徵提取的方法(樓上已經有答主提到了);

2、以YOLO為代表的回歸方法(YOLO,SSD等方法可以去了解了下)。

對了,樓上說到了業界的方法很實用,算是學習到了。學術界和工業界還是有區別的。


推薦閱讀:

谷歌開放的TensorFlow Object Detection API 效果如何?對業界有什麼影響?

TAG:機器學習 | 圖像識別 | 目標檢測 | 深度學習DeepLearning |