如何看待Tencent AI 人臉檢測結果在FDDB上的逆天表現?

騰訊的檢測結果比第二名高出太多,是真牛逼,還是可能存在作弊?


更新一下:

剛剛看到有人說published榜裡面所謂的no.1就是小米去年發的那篇「論文」...那麼有很大的可能性是tencent ai也用了這個訓練方法做的結果了,考慮到騰訊優圖在此之前就在fddb上做過相關工作,得到這個提升也挺合理,但從體現演算法的實用性上我認為不用10 folds交叉才是最吼的。

從discrete score來看至少在fddb這個庫上tencent ai擬合的很好,僅此而已,沒什麼逆不逆天的說法。

至於其他答案中提到官方文檔中10 fold c-v取average的做法,在官方網站的FAQ上卻又看到這種說法:

Q. How do I report a single ROC from the ROCs of 10 folds?

Running the evaluation code for each fold will produce 10 ROC curves, one for each fold. However, the standard way for generating ROCs adopted by users on FDDB is to generate the ROC curve over all the images in the 10 folds at once.

所以,是否由於實驗標準不統一造成這個現象也有待考究,以上です。


我仔細看了TencentAI.v1的曲線,很明顯它是按照FDDB的說明文檔

http://vis-www.cs.umass.edu/fddb/fddb.pdf里規定的10-fold cross-validation的方式來做的(如下圖所示), 所以是9/10的FDDB數據訓練,剩下的1/10 FDDB數據做測試,這是OK的。

FDDB官網上顯示,也有一個團隊在FDDB上用10-fold cross-validation的方式取得了很好的結果,目前在所有published methods里是No. 1。感覺TencentAI.v1這個結果目前在連續分數曲線上的表現不是很理想,應該還有改進的空間。


看到有人回復說,不要懷疑深度學習的能力,深度學習是可能做到這樣好的效果的。

我一點都懷疑深度學習的能力,事實上,這個測試集的任務並沒有那麼難,深度學習可以解決比這難多了的任務,比如說過的wider face。我說的逆天,並不是說檢測出這些遮擋模糊的人臉就是逆天。我說的逆天,是指,測試集中同樣的兩個人臉 A,B。A標註是人臉,B標註不是人臉,檢測器把A檢測出來了,而不檢測出B人臉。這可能么?

----------------------------------------------------------------------------------------------------------------------------

好吧,沒人回復,那我就發表一下自己的看法。歡迎指正

我說,肯定是拿測試集參與訓練了,作弊無疑!!

先介紹下背景:FDDB數據集是一個公開的人臉檢測的測試數據集,裡面包含2845張圖片共5171張人臉。這些圖片中的人臉來自不同場景,包括各種變化條件,如光照變化,遮擋,不同大小,不同解析度,模糊等諸多變換。因為比較接近真實場景,大部分做人臉檢測的研究者或者公司都會將他們的檢測器到上面做一個測試,跑一張ROC曲線圖,也就是對應圖一中的不同顏色的線,每根線對應的是某個檢測器的結果。橫軸表示的是誤檢的人臉個數(對應的是誤檢率),縱軸表示的是準確率。誤檢率越小,準確率越高,檢測器越強,對應的是曲線越靠近左上角越厲害。

早先的方法是基於手工設計特徵來實現的,誤檢個數在1000以內的檢測準確率基本是在90%以下。不要覺得弱,這樣的檢測器已經很努力了,看看下面的樣例圖就知道,要讓他檢測這種遮擋模糊的人臉真的是太難了!!。

(圖片中框是ground truth,在這裡將他們在圖片上顯示出來了)

DeepLearning崛起後,準確率就刷刷上去了,這得益於深度神經網路強大的處理能力,能夠融合更多信息,擬合更複雜的數據分布。左上角扎堆在一塊的基本上都是用不同神經網路方法來實現的檢測結果。

不難發現,大多數曲線距離左上角1的位置(左上角就是100%的準確率,0 誤檢),還是有一段距離的, 既然深度神經網路這麼厲害,為什麼大家都上不去了呢?是不是因為大家的檢測器還不夠牛逼,準確率還待提升呢?

然而並不是,而是因為數據本身就存在誤差,雜訊等。而這個測試集中標註的很多也是不一致的,很多真實人臉沒有標註,而有些模稜兩可的人臉又標出來了,這鍋自然是要甩給標註人員的。但是人家也沒辦法,這麼多數據,不同的人標註,很多主觀因素在裡面。FDDB的論文中說是側臉大於90度的就不標,像素小於20 的不標,太過模糊的不標,遮擋超過一定比例的不標。但是臨界處的,真的就不好說了。我們來看幾張典型的圖,紅色的框是標註的結果,沒框的就是沒標。試下一下,如果你來標是怎樣的。

下面選幾張典型的出來看看,這種不一致性的圖片還是挺多的,尤其是遮擋的情況。有些遮擋厲害的標註出來了,有些遮擋少一點的沒有標註出來。模糊的情況也類似。

要擬合這樣一個因人工標註導致的人臉分布,誤差是不可避免的。所以針對這個問題,不同應用場景下,就有了各自取捨。

有些檢測器為了使誤檢數目少,然後就犧牲了那些不確定的人臉,反正不是特別確定的就當不是人臉吧,所以其在左端升得很快,誤檢很少,很可靠。但是那些什麼個遮擋,小人臉之類的,檢測器才不關心呢,管他們是不是人臉,我要的就是誤檢少,那你們就都不是人臉吧。

有些檢測器就是要把那些遮擋,模糊的都給檢測出來,這樣的任務其實更難,尤其是遮擋和小人臉。這樣的檢測器雖然厲害,但是在這個測試集上的表現就不怎好了,無法很好體現不出其強大。拿tiny face 的檢測器到這上面測試下看,可能會把測試集中沒有標註的人臉都檢測出來了,測試曲線肯定是不行的,後面升得高,前面肯定比較低。原因就在於不確定人臉的模糊性,同樣類型的人臉,有可能標,也有可能沒標,把沒標的檢測出來,那自然就是誤檢了。所以曲線在左端是上不去的。

那丟掉這些不確定的,是不是誤檢就少了,曲線就上去了? 這樣也不行,因為這些不確定的人臉,有部分標註了啊。丟掉之後準確率也就上不去了。

而有另外一個難度更大的測試數據集wider face,那上面真正是人眼都看不清的都標註了。
(看看wider face 上的標註領略一下什麼叫慘絕人寰WIDER FACE: A Face Detection Benchmark)

那回過頭來看看騰訊的結果,騰訊在50個誤檢的時候就到95%左右了。甩開第二名3~4個百分點。有人問騰訊的檢測器就是這麼屌,難道不可能么?

騰訊誤檢在50左右的檢測結果

第二名的檢測結果

有人會問,是不是標註很多與測試集場景類似的圖片來進行訓練,就可以達到這樣的效果,大騰訊那麼多數據,擴充樣本不就可以了么?

實質上,前幾名的曲線可能都是對訓練集進行了擴充或清洗,可能加入了與測試場景類似的圖片,或者是對原有的訓練數據集進行清洗得到的。但是騰訊的結果,除非用上測試集參與訓練,否則是不可能出現的。

怎麼證明騰訊是作弊了呢。

相信很多人跑過這個測試集,那麼我們來驗證一下。

步驟如下:

1.你拿檢測器跑一遍這個測試集,當然你的檢測器不要太渣,準確率90%以上就可以了,如果沒有,那推薦個開源檢測器好了(tornadomeet/mxnet-face)。

2 你的檢測器肯定有不少誤檢和漏檢的圖片,將誤檢和漏檢圖片都保存下來(大概可能有兩百多張誤檢和三四百張誤檢圖片),同時將檢測結果按FDDB評測的要求進行保存。

3.你的檢測器肯定是不夠完美的。那假設還有另外一個檢測器,這個檢測器就是你的人工驗證,來進一步對檢測器的檢測結果進行修正。你可以先了解下大概哪樣的人臉是應該要檢測出來的(http://vis-www.cs.umass.edu/fddb/fddb.pdf)。最好不要看這些漏檢和誤檢圖片的真實標註,參考一下也行,盡量不要因為label而影響你的判斷。如果你認為你一個人主觀因素太強,可以找專業的標註人員來完成這個工作。其實這個工作也挺費時間的。

4.修正後的結果你是不是認為很牛逼了。你把修正後的結果去評測一遍。這個結果其實是檢測器加人眼睛的結果,或者直接說是人眼的結果,檢測器只是為了幫我們減少工作量。

5.那這個曲線和騰訊的對比一下。我的個乖乖。是不是被騰訊的結果嚇到了,我可是根據標註準則相當於是做了下標註校驗,那騰訊在沒有測試集參與的情況下能夠擬合到這樣一個效果,是不是匪夷所思,是不是要上天了!!!

所以唯一的可能,騰訊用了測試數據參與了訓練,才將這個有誤差的人臉數據擬合到這麼好。

Naiyan Wang 的回復很有道理的。我再補充一下,因為我得到的分別是誤檢圖和漏檢圖,有些圖人眼睛看沒誤檢,但是標註說有誤檢,所以我就要參考標註,把這個人臉刪掉。上面說不參考標註是說錯了。驗證結果其實是比人眼的結果更貼近標註數據的結果。

檢測結果

標註的真實結果

就拿側臉來說,比如測設圖像中有100張這樣的不好判定的側臉,五十張標註了,五十張沒有標註。而騰訊的檢測器剛好能夠把那五十張沒有標註的人臉當不是人臉,把另外標註了的五十張當成人臉。這是難以置信了。


刷分的時代還沒過么


然並卵,你放大街上試試


做過行人檢測的說兩句,刷標準庫這個事情到後期就是大家都來猜ground truth了。一個標準庫剛出來的時候,一些排名靠前的方法確實牛B,那個時候刷performance基本上不需要猜ground truth。這也是這些標準庫真正的意義所在。後續的方法基本的就是在前人的方法基礎上做一點點改進。再後來,做得改進基本不work了,那大家都來猜ground truth好了。猜得正確,在做evaluation的時候performance也能提高一些。

畢竟ground truth都是人標註的,一個數據量的巨大的標準庫不可能由一個人獨立完成,不同的人標註的標註可不一樣。一個簡單的例子,行人檢測中,半截子人進入了圖像中,該不該標,三分之一進入了呢?三分之二呢?如果標的話,是僅標進入圖像的部分呢還是依照常識把未進入的部分也標出來的呢?所以猜ground truth確實有挺大的性能提升空間的,但是這種trick基本上不會有太大學術價值了。至此,這個資料庫的生命期基本也就結束了,這也是為什麼現在一些公認比較好的標準庫隔一到兩年必須更新。不然一些大牛課題組根本不會浪費時間去猜你的ground truth。

好了,具體到FDDB這個資料庫,ground truth都公開了。猜都不需要猜了,那麼要做的就是提高那些演算法能標出來但是和ground truth不一致人臉了。個人傾向於認為Tencent.v1在FDDB上還是表現不錯的,不存在用測試數據訓練的作弊行為,因為完全沒有必要!


個人感覺TencentAI的結果沒有問題,用深度學習刷這麼高是完全有可能的。圖中性能曲線是ROC曲線,這種曲線反映的是誤檢率和準確率之間的聯動,能夠比較全面的比較演算法的能力,曲線越是接近左上角說明演算法越牛逼。目前在FDDB上人臉檢測的結果距離左上角還很遠,還有較大的挖掘空間,TencentAI的脫穎而出完全是有可能的。 通過合理設計神經網路結構,合理的優化參數,深度學習的表達能力能夠覆蓋FDDB的人臉圖像中的光照變化、尺度變化、陰影和遮擋。


個人覺得Tencent AI在該數據集上的表現合情合理。我們可以看見深度學習演算法已經在各個領域,特別是視覺領域有著非常好的效果,因為深度學習的特徵學習能力特別的棒,以致深度學習在有各種噪音的數據上,能夠超越傳統的優秀演算法。另外看見有人說一定是用了評測集,我覺得不然。不能只因為該演算法比別人的結果好就說別人用評測集了。最後很高興能看到機器學習演算法在各個領域上的突破,之後不久肯定也會有其他的演算法或者騰訊自己演算法的優化版再超越該演算法,這是這幾年的一個必然事件。讓我們拭目以待。


只說一句,FDDB的可優化性很強。


深度學習常常打破常規,刷新人們的認知。使用深度學習演算法刷出這樣的曲線是有可能的。在FDDB上人臉檢測的ROC曲線離左上角還有距離,TencentAI.v1合理設計的深度學習演算法得到這樣的曲線完全是有可能的,這沒什麼逆天不逆天的,只能說明Tencent團隊在FDDB上刷出了好成績而已。


請在widerface上測試


是真牛逼


我就呵呵了,了解內幕的飄過~~~~~~~~~~~~~~~


知道小米拿什麼刷的嗎?我覺得這個數據集沒有什麼意義....


只說一句,現在都是人臉識別商業化的時代了,為什麼還有人拿數據集來說事。

個人猜測因為他們沒有其它拿得出手。


推薦閱讀:

如何評價FAIR的最新工作Data Distillation?
傳統的CTR或推薦系統擁有高維特徵和稀疏數據,轉向深度學習如何高效實現?
老師木的機器學習水平,帶實習生的水平,以及當爸爸的水平怎麼樣?
Deepmind的Alpha Zero是如何把各種棋類規則融入神經網路的?
NIPS 2016有什麼值得關注的呢?

TAG:人工智慧 | 人臉識別 | 機器視覺 | 目標檢測 | 深度學習DeepLearning |