談?wù)劵谏疃葘W(xué)習(xí)的目標(biāo)檢測網(wǎng)絡(luò)為什么會誤檢,以及如何優(yōu)化目標(biāo)檢測的誤檢問題
對于以人臉檢測為代表的目標(biāo)檢測深度學(xué)習(xí)網(wǎng)絡(luò)來說,誤檢是一件非常惱人的事情。把狗檢測為貓尚可接受,畢竟有些狗的確長得像貓,但是把墻壁、燈泡、拳頭、衣服檢測成人臉就不能忍了,明明一點(diǎn)都不像。稍稍思考下,我感覺應(yīng)該能夠從兩個(gè)方面解釋下誤檢問題。
圖像內(nèi)容問題
在訓(xùn)練人臉檢測網(wǎng)絡(luò)時(shí),一般都會做數(shù)據(jù)增強(qiáng),為圖像模擬不同姿態(tài)、不同光照等復(fù)雜情況,這就有可能產(chǎn)生過亮的人臉圖像,“過亮”的人臉看起來就像發(fā)光的燈泡一樣。。。如果 發(fā)光燈泡 經(jīng)過網(wǎng)絡(luò)提取得到的特征,和 過亮人臉 經(jīng)過網(wǎng)絡(luò)提取得到的特征相似度達(dá)到臨界值,那么網(wǎng)絡(luò)把發(fā)光燈泡檢測為人臉就不足為奇了。
同樣的道理,用于訓(xùn)練網(wǎng)絡(luò)的人臉數(shù)據(jù)集中,若是存在一些帶口罩,帶圍巾的人臉圖像,那么網(wǎng)絡(luò)就極有可能“記住”口罩、圍巾的特征,在預(yù)測階段,要是有物體(比如衣服)表現(xiàn)得像口罩、圍巾,那么網(wǎng)絡(luò)就有可能把該物體檢測成人臉。
當(dāng)然,以上討論都是啟發(fā)性的,本文暫時(shí)不把它當(dāng)做討論重點(diǎn)。
目標(biāo) bbox 的范圍問題
目前非常流行的深度學(xué)習(xí)目標(biāo)檢測網(wǎng)絡(luò)(SSD、YOLO、RetinaFace 等)在訓(xùn)練階段,我們需要提供目標(biāo)在圖像中的 bbox,所謂 bbox,其實(shí)主要就是指目標(biāo)的外接矩形。這樣訓(xùn)練而來的網(wǎng)絡(luò)在預(yù)測階段,一般給出的也是目標(biāo)的外接矩形。
問題就出在 bbox 上,接下來的討論還是以人臉檢測為例,請看下圖:
這是一個(gè)典型的目標(biāo) bbox。bbox 本質(zhì)上是矩形,但通常目標(biāo)(人臉)不是矩形,bbox 內(nèi)部包含一些非人臉內(nèi)容, 我認(rèn)為這些非人臉內(nèi)容要對誤檢負(fù)一部分責(zé)任 。
常用的人臉檢測網(wǎng)絡(luò)一般使用大量的卷積層提取圖像特征,得到的特征圖尺寸通常小于原始輸入圖像數(shù)倍(取決于卷積的 stride、padding 等參數(shù)),網(wǎng)絡(luò)對特征圖的每一個(gè)“像素點(diǎn)”做二分類(人臉類、背景類),“誤檢”就是在這個(gè)二分類過程中產(chǎn)生的。
數(shù)倍小的特征圖的一個(gè)“像素點(diǎn)”都對應(yīng)著原圖的一小塊矩形區(qū)域內(nèi)的像素,這么看來,特征圖的每一個(gè)“像素點(diǎn)”都可視為一個(gè) bbox,只不過這些 bbox 有的屬于背景類,有的屬于人臉類。
為了簡單,將人臉檢測網(wǎng)絡(luò)的二分類分支抽離出來,設(shè)為 p_{\theta } ,再令 x 表示特征圖中的“像素點(diǎn)”, q 表示該像素點(diǎn)的標(biāo)簽,則訓(xùn)練 p_{\theta } 的一個(gè)常用方法就是優(yōu)化下述目標(biāo):
- \underset{\theta}{argmax}{\mathbb{E}_{x \sim p_{\theta}(x)}}\frac{p_{\theta}(y|x)}{q(y|x)}
其中 y 為 0(背景類)/1(人臉類)標(biāo)簽。 對于人臉類 ,理想情況下,我們希望 x 為人臉數(shù)據(jù),但是實(shí)際上 x 卻是一小塊 矩形 區(qū)域內(nèi)部的所有圖像數(shù)據(jù),這個(gè) 矩形 內(nèi)部常常包含一些非人臉數(shù)據(jù),因此實(shí)際被優(yōu)化的目標(biāo)為:
- \underset{\theta}{argmax}{\mathbb{E}_{x \sim p_{\theta}(x+\Delta x)}}\frac{p_{\theta}(y|x+\Delta x)}{q(y|x+\Delta x)}
上式中 x 表示人臉數(shù)據(jù), \Delta x 表示非人臉數(shù)據(jù)。通常 q(y|x+\Delta x) 是人工標(biāo)注的標(biāo)簽,因此 \Delta x 不會影響 q 的結(jié)果,優(yōu)化下述目標(biāo)就可以了:
- \underset{\theta}{argmax}{\mathbb{E}_{x \sim p_{\theta}(x+\Delta x)}}\frac{p_{\theta}(y|x+\Delta x)}{q(y|x)}
我們以為訓(xùn)練得到的是 p_{\theta}(y|x) ,實(shí)際得到的卻是 p_{\theta}(y|x+\Delta x) ,可以認(rèn)為 \Delta x 的存在是引起誤檢的主要原因之一。
優(yōu)化誤檢問題
既然 \Delta x 的存在會引起誤檢,那么優(yōu)化該問題直觀上有以下方法:
- 令 \Delta x \rightarrow 0
- 令 p_{\theta}(y|x+\Delta x) \rightarrow p_{\theta}(y|x)
遺憾的是,這兩個(gè)方法在實(shí)踐中都很難 直接 實(shí)現(xiàn)。雖然我們可以不考慮人工成本,將粗糙的人臉 bbox 用更加精細(xì)的多邊形代替,但是縮放數(shù)倍的卷積特征圖本身也隱含著“矩形框”,另外, 人眼認(rèn)為的“人臉”未必是網(wǎng)絡(luò)認(rèn)為的“人臉” 。
本文不考慮像素級別的語義分割任務(wù)。
稍稍再想一想,不難發(fā)現(xiàn),雖然上述理論是將 x 和 \Delta x 作為彼此獨(dú)立的像素集合處理得到的,但是我們可以對該理論做稍許推廣,也即:將 x 視為 bbox 內(nèi)的所有像素, \Delta x 視為 bbox 內(nèi)所有干擾人臉誤檢的像素差值,那么該理論就更加有用了。
我們完成了優(yōu)化人臉檢測網(wǎng)絡(luò)誤檢問題的理論構(gòu)建,該理論將指導(dǎo)接下來的網(wǎng)絡(luò),以及對應(yīng)的損失函數(shù)設(shè)計(jì)。
構(gòu)建深度學(xué)習(xí)網(wǎng)絡(luò)
構(gòu)建 s_w 的方法有多種,下面是我做實(shí)驗(yàn)時(shí)簡單構(gòu)建的網(wǎng)絡(luò)關(guān)鍵部分的結(jié)構(gòu)示意圖(這樣構(gòu)造有些粗糙,但是多少能夠驗(yàn)證下理論):
常規(guī)方法在得到特征圖 x_f + \Delta x_f 時(shí),就直接將其送到背景/人臉二分類網(wǎng)絡(luò)分支做分類了。在上圖的網(wǎng)絡(luò)架構(gòu)中,我們增加了額外的一個(gè)分支,該分支從特征圖 x_f + \Delta x_f 得到一個(gè)同尺寸的 1 通道人臉特征概率圖,該特征概率圖與 x_f + \Delta x_f 相乘即可得到 x_f + \Delta x'_f ,這樣就可以得到兩個(gè)分類結(jié)果:
- p_{\theta}(x_f + \Delta x_f)
- p_{\theta}(x_f + \Delta x'_f)
再根據(jù)前面理論分析得到的 s_w 優(yōu)化方法,同步優(yōu)化 \theta 和 w ,即可完成訓(xùn)練。
若干可視化訓(xùn)練效果
這里我沒有太過仔細(xì)的測試,只在手邊的 RetinaFace 網(wǎng)絡(luò)上增加了前面上述結(jié)構(gòu),訓(xùn)練 10 個(gè) epoch 后,中間生成一些可視效果圖:
左:原圖及bbox標(biāo)簽;中:人臉特征概率圖;右:經(jīng)過 s_w 處理過的圖。
可以看出,雖然 標(biāo)簽是矩形的 bbox,但是通過簡單增加一條訓(xùn)練分支,我們得到了類似于語義分割的效果。
此外,從效果圖2中可以看出,網(wǎng)絡(luò)認(rèn)為的人臉區(qū)域與人眼感受的區(qū)域并不完全一致,但是總體是保留關(guān)鍵特征的。類似的還有下圖。
誤檢的優(yōu)化效果
還是偷懶,暫時(shí)沒有太過詳細(xì)的測試,只在一個(gè)非常?。?000張規(guī)模)的數(shù)據(jù)集上做了測試,誤檢降低了 5.2%,對比對象為:
- p_{\theta}(x_f + \Delta x_f)
- p_{\theta}(x_f + \Delta x'_f)
當(dāng)然,這只是我粗略訓(xùn)練和測試的結(jié)果。后續(xù)有時(shí)間再嘗試仔細(xì)構(gòu)造下網(wǎng)絡(luò)設(shè)計(jì)以及訓(xùn)練,補(bǔ)上公開數(shù)據(jù)集的測試結(jié)果對比吧。