[AI開發]目標檢測之素材標註

周見智發表於2019-08-02

算力和資料是影響深度學習應用效果的兩個關鍵因素,在算力滿足條件的情況下,為了到達更好的效果,我們需要將海量、高質量的素材資料餵給神經網路,訓練出高精度的網路模型。吳恩達在深度學習公開課中提到,在算力滿足要求的前提下,模型效果會隨著素材數量的增多而變好,理論上沒有上限。實踐證明,在普通基於深度學習的應用開發過程中,素材的數量和質量對最終模型效果的影響出乎意料的大。注意這裡提到的“素材質量”,光有“素材數量”還不夠,我們還要保證素材標註的質量。本文以目標檢測應用為例,來說明如何保證影像素材標註過程中的質量。

 

常見目標檢測演算法

常見目標檢測演算法有SSD、Yolo以及Faster-RCNN等(實際上這是我用過的幾種),之間的區別可以上網搜到,我之前的部落格也有提到過,各有優劣。三種演算法模型訓練需要的素材格式基本相同:

  • 二維影像檔案;
  • 對應二維影像中人工標註出的感興趣目標資訊,包括目標座標/大小、目標型別,一般用(left,top,width,height,class)來表示;

模型訓練的過程就是將上述素材資料餵給神經網路,反覆最佳化,最後得到效果相對比較好的模型,然後模型就可以上線做推理了。各種目標檢測演算法模型最終推理輸出來的結果也基本一樣,對於給定的二維輸入影像,輸出該影像中檢測到的目標資訊,包括目標座標/大小、目標型別以及該目標的可信度,一般用一個list表示,list中每個元素格式為(left,top,width,height,class,score)。Score代表模型認為該目標的可信度,可以透過該值過濾部分檢測結果。

 

影像素材標註

透過這個PPT我們知道,深度學習模型訓練的過程就是不斷地調整引數,使用預先標註的具體素材資料不停地去擬合通用場景,最後能夠準確預測非素材集中的輸入。模型訓練需要大量素材標註作為基礎,就目標檢測而言,素材標註的過程就是人工用工具在影像中標出感興趣的目標,並生成標籤資料。

影像素材標註工具有很多,很多人在用的是labelimg,主要用於目標檢測素材標註:

如上圖,對於每張圖片,人工標出圖片中感興趣的目標,比如影像中的人、汽車、卡車等等。儲存後,每張圖片對應生成一個txt檔案,該txt檔案中記錄人工標註的結果:

如上圖,該圖片一共標出9個目標,2個Person、3個Car,4個Truck,每個目標對應一行,第一列表示型別ID(從0開始)。模型訓練時,將圖片和標註資料同時喂進神經網路,不斷調整引數,到達效果最優。

 

素材標註質量如何影響模型的準確性?

影像素材標註時,需要人工標出目標的大小/位置,用一個矩形方框表示,並給出目標型別,模型訓練時會根據標註的素材來調整引數。人工標註有時會出一些問題,比如目標矩形框位置不對(框子太大、太小、位置偏了),或者目標型別標錯,本來是一個人,人工給它標成了汽車。這些標註時的問題都會影響最終模型訓練的效果,仔細想一下,你不斷告訴神經網路人是車、而車是人,最後神經網路都分不清了。正常情況下,人工標註的方框大小、位置應該合適,矩形方框剛好將目標包圍住,如果框子太大、或者太小、甚至位置偏移了,都會影響神經網路對矩形方框中真實內容的判斷。

如果僅僅追求素材的數量而不顧素材標註的質量,即使數量再多,也沒有效果,實踐證明,模型效果反而越來越差。

 

影像素材標註重點

目標檢測用到的素材,在標註過程中需要注意以下幾點:

1. 標註方框大小合適

所謂大小合適,即矩形方框應該剛好將目標包圍住,之間的間隙不能太大,也不能太小。太大太小的話,最後模型在推理時,也會出現目標框得不準的情況,或者在影片影像檢測中,出現前後幀目標抖動嚴重,不能鎖定。同時在標註的時候,一定要保證矩形方框包含了目標的輪廓資訊,因為輪廓資訊對於模型訓練來講很重要,它可以區分不同型別的目標。下圖示註的矩形方框太小:

2. 標註方框位置合適

原因跟上一條類似,下圖雖然矩形方框大小合適,但是明顯位置偏太遠了:

3. 需要豐富多視角的素材

這個其實跟素材的準備有關,我們不能只標幾種視角的素材圖片。在道路監控應用場景中,素材應該涵蓋各種攝像機視角,正前方、正後方、左側前方、右側前方、左側後方、右側後方以及俯視視角等等。每種視角的素材都應該被標註,這樣訓練出來的模型才有更大的通用性。

4. 目標被遮擋也要標註

不能只標註影像中完整的目標,被遮擋的目標,只要人眼能看清是啥的都應該被標註,並且矩形框只需要包含看得見的部分即可。這樣做的原因跟上一條類似,提高模型的通用性,實際應用場景中,很多目標被遮擋,模型仍然需要將其檢測出來,所以我們需要標註類似的素材。下圖道路擁堵,一些車身被遮擋,但是明顯可以分辨出是什麼目標:

5. 小目標也不能漏掉

雖然不同的演算法對小目標的檢測效果不同,比如Yolo對小目標檢測效果比較好,但是前提是我們需要準備小目標的素材標註。一張圖片素材中,近處的大目標需要標註,遠處人眼看得清的小目標同樣需要標註。原理跟上一條類似:只要人眼能分清是啥的小目標,都應該標出來。下圖遠處的小目標可以認出是小汽車:

6. 人眼分不清是啥的不要標

很多時候,由於素材圖片本身的原因、或者目標被遮擋大部分、或者遠處目標實在太遠,人眼無法分辨是什麼,雖然知道是一個目標,但是不知道它到底是汽車Car還是客車Bus甚至是人,這種時候不要標註。否則會給神經網路帶來誤導。下圖被遮擋部分太多,可以忽略不用標註:

 

如何保證素材標註的質量

上面說了這麼多,其實要保證素材標註質量的有效方式有兩條:

1. 不要光追求速度

給做素材標註的團隊強調,雖然有數量上的指標,但是指標不能定得太高,如果定得太高,大家都為了完成數量任務,自然會忽略了質量。最後標註質量肯定上不去,型別出錯、方框位置忽大忽小,必然需要大量返工。

2. 專人做素材稽核

專門找一小撮人做素材稽核,主要負責素材標註後的驗證,看看型別是否出錯,方框的位置、大小是否錯得離譜等等。千萬不要小看這項工作,它的作用跟code review一樣,容易被忽視,其實它提高效率不是一星半點。

 

相關文章