GFocal解读
總的來說,GFocal這篇文章的數(shù)學性還是很高的,如果對此不感興趣,可以閱讀原作者的《大白話 Generalized Focal Loss》。
簡介
眾所周知,單階段檢測器的發(fā)展是目標檢測領域的重要研究方向,而單階段方法往往將目標檢測視為密集分類和定位任務(其中定位任務值得就是邊框回歸)。分類任務通常通過Focal Loss進行優(yōu)化,而邊框定位通常按照Dirac delta分布來學習。最近單階段檢測器的研究趨勢為引入一個單獨的分支來估計定位的質(zhì)量(centerness或者iou),這個質(zhì)量預測有助于分類任務的進行從而整體上提高檢測的性能。GFocal這篇文章就是針對上述的三個表示(representation)進行的工作,分別是分類表示、定位表示和檢測框的質(zhì)量估計,這里的表示指的是檢測器最終的輸出也就是head的輸出。這三種表示一般關系如下圖所示。
作者發(fā)現(xiàn)目前的表示學習有兩個問題,第一,質(zhì)量估計和分類訓練和推理時時不一致的(兩個分支單獨訓練,但是推理時乘在一起,如上圖所示);第二,Dirac delta分布的定位表示不夠靈活,無法建模復雜場景下的歧義和不確定性。
為了解決這兩個問題,論文作者設計了新的表示方式,將質(zhì)量評估合并到分類預測向量中形成一個聯(lián)合進行定位質(zhì)量評估和分類的表示,此外也使用一個向量來表示任意的概率分布,這個概率分布用來建模邊框位置信息(也就是說,邊框回歸的輸出從定值變?yōu)榱艘粋€概率分布)。這兩個方案可以有效解決上述的問題,特別是提出的聯(lián)合表示可以有效消除不一致問題,但是因此標簽也變?yōu)榱诉B續(xù)值,因此作者提出對離散值的focal loss的擴展,即論文的Generalized Focal Loss (GFL),成功推廣到了連續(xù)域上。在COCO數(shù)據(jù)集上,同等backbone和訓練設置下,GFocal獲得了0.45的AP,超越了SAPD和ATSS,而GFocal有著更快的速度。這文章最終收錄在NeurIPS2020。
-
論文標題
Generalized Focal Loss: Learning Qualified and Distributed Bounding Boxes for Dense Object Detection
-
論文地址
http://arxiv.org/abs/2006.04388
-
論文源碼
https://github.com/implus/GFocal
介紹
近年來,密集檢測器逐漸引領了目標檢測的發(fā)展趨勢,而對于邊框表示和定位質(zhì)量估計的研究也有了不錯的進展。在過去數(shù)年中,邊框表示被建模為簡單的Dirac delta分布。FCOS中提出了一個額外的定位質(zhì)量估計分支(使用center ness得分或者iou得分),這為檢測的準確性帶來了不小的提高,但是,在推理時質(zhì)量估計和分類分支是組合到一起(通過乘法)作為NMS排序的置信度的。盡管有了很大的成功,但是論文作者發(fā)現(xiàn)了現(xiàn)有方法存在的一些問題。
如上圖(a)所示,在密集預測檢測器中,定位質(zhì)量評估和分類得分時分別訓練的,但是推理時卻是組合使用的。還有就是,定位質(zhì)量評估的監(jiān)督只對正樣本進行,這是不可靠的,因為有些負樣本也可能獲得較高的質(zhì)量得分(因為它們時沒有監(jiān)督的,所以負樣本的質(zhì)量預測時模型不了解的未定義行為),而這個不合理的高質(zhì)量評估得分和很低的分類得分乘起來后用于NMS排序,可能使得這些負樣本排到正樣本前面,這當然是很不合理的(示例如下圖(a)所示)。
常用的邊界框表示的方法可以認為是狄拉克分布,但是實際場景中目標的標注框往往具有歧義和不確定性,比如下圖所示的不清晰的邊界(被水模糊的滑板和嚴重遮擋的大象),狄拉克這種簡單分布式難以建模的。后來誕生了一些方法采用高斯分布來建模邊框,但是高斯分布還沒有復雜到足以捕獲目標框的位置分布,因為真實的分布可能是任意且靈活的,不需要高斯分布那樣對稱。
為了解決上述的兩個問題,GFocal設計了新的邊界框表示方法和新的定位質(zhì)量估計表示。對于定位質(zhì)量的表示,作者提出將其和分類得分進行合并得到一個統(tǒng)一的表示,而對于邊界框的表示,作者則將其建模為連續(xù)空間上的概率分布(論文稱為General distribution),下文詳細。理解這兩個思路。
方法
方案
上文說到,作者為了解決定位質(zhì)量表示和分類得分表示不一致的問題,作者將定位質(zhì)量融入到了分類得分中形成一個統(tǒng)一的表示向量,該向量GT類別下標處對應的置信度不再是分類置信度而是質(zhì)量預測的得分(這個得分一般采用預測框和真實框的IoU來表示)。將這個統(tǒng)一的表示記為classification-IoU joint representation,它可以被端到端優(yōu)化且在推理時直接使用,如下圖所示。這種方法可以有效消除訓練和測試的不一致并且建模了分類和質(zhì)量評估之間的強相關性。進一步看,由于在分類分支中,因此負樣本也會被監(jiān)督(質(zhì)量得分為0),使得質(zhì)量評估更加可靠。
對于邊框的表示,作者提出用任意分布來建模邊界框并在連續(xù)空間上直接學習概率分布,不引入如高斯分布那樣較強的先驗知識。這里其實簡單理解就是,原本FCOS等方法預測中心點到邊界的距離是一個值(狄拉克分布),而論文預測的時中心點到邊界的概率分布向量。這種方法可以有效進行邊框回歸,同時感知邊框的潛在分布。
具體方法
方案出來了,接下來就是要面對的問題了,首先看第一個方案,此時其實預測的標簽已經(jīng)從離散的{0,1}變?yōu)榱诉B續(xù)的0-1的,而Focal Loss是不支持離散標簽的,它的公式可以簡單表述如下(忽略原始論文的αt\alpha_tαt?)。
FL(p)=?(1?pt)γlog?(pt),pt={p,when?y=11?p,when?y=0\mathbf{F L}(p)=-\left(1-p_{t}\right)^{\gamma} \log \left(p_{t}\right), p_{t}=\left\{\begin{aligned} p, & \text { when } y=1 \\ 1-p, & \text { when } y=0 \end{aligned}\right. FL(p)=?(1?pt?)γlog(pt?),pt?={p,1?p,??when?y=1?when?y=0?
這個公式中的y∈{1,0}y \in \{1,0\}y∈{1,0}表示真實類別,而p∈[0,1]p \in[0,1]p∈[0,1]表示估計的標簽為y=1y=1y=1的概率,γ\gammaγ是可以調(diào)整的聚焦參數(shù)。具體來看,Focal loss由一個標準交叉熵的部分?log?(pt)-\log \left(p_{t}\right)?log(pt?)和動態(tài)縮放因子部分(1?pt)γ\left(1-p_{t}\right)^{\gamma}(1?pt?)γ組成,這個縮放因子可以在訓練時對容易樣本降權而使得模型快速聚焦難樣本的學習。
然而,對于分類質(zhì)量的聯(lián)合表示,標簽已經(jīng)變?yōu)榱?-1的連續(xù)值,具體說,此時y=0y=0y=0表示質(zhì)量得分為0的負樣本,而0<y≤10<y \leq 10<y≤1代表目標IoU標簽為yyy的正樣本,為了解決這個問題,作者對Focal Loss的兩個部分分別進行了擴展以保證可以在聯(lián)合表示下使用。首先,原來的交叉熵部分?log?(pt)-\log \left(p_{t}\right)?log(pt?)被修改為完整的形式?((1?y)log?(1?σ)+ylog?(σ))-((1-y) \log (1-\sigma)+y \log (\sigma))?((1?y)log(1?σ)+ylog(σ));接著,縮放因子部分(1?pt)γ\left(1-p_{t}\right)^{\gamma}(1?pt?)γ被推廣到預測的sigmoid結果和連續(xù)標簽yyy的絕對距離,即∣y?σ∣β(β≥0)|y-\sigma|^{\beta}(\beta \geq 0)∣y?σ∣β(β≥0),兩側(cè)的絕對值確保非負。將這兩個拓展部分組合到一起,形成完整的Quality Focal Loss(QFL),公式如下。
QFL(σ)=?∣y?σ∣β((1?y)log?(1?σ)+ylog?(σ))\mathbf{Q F L}(\sigma)=-|y-\sigma|^{\beta}((1-y) \log (1-\sigma)+y \log (\sigma)) QFL(σ)=?∣y?σ∣β((1?y)log(1?σ)+ylog(σ))
和Focal Loss類似,魔改后的調(diào)制因子也有關注難樣本的功能,當預測的質(zhì)量估計值與真實標簽相差很多的時候,∣y?σ∣β|y-\sigma|^{\beta}∣y?σ∣β的值便較大,模型就能更關注于這些難分類的樣本;而當預測值與真實標簽很接近的時候,損失便也接近0,所以簡單樣本的損失權重便被降低了。
上如右側(cè)的上半部分就是上面提到的QFL,下半部分就是我們后面要講的DFL。
我們接著看,作者如何解決第二個方案遇到的問題,這篇文章采用的邊框回歸的目標是中心點到四個邊的相對偏移,如上圖所示的回歸分支(采用哪種回歸目標其實大同小異)。如上圖左側(cè)的回歸分支所示,傳統(tǒng)的邊框回歸是將標簽yyy建模為狄拉克分布,也就是只有一個值概率為一,說的更通俗易懂就是只會產(chǎn)生一個輸出值(比如到左邊框的偏移是xxx),通常通過全連接層實現(xiàn)。作者認為應該不引入先驗直接建模一個通用分布P(x)P(x)P(x),也就是預測值是一個概率分布,可以理解為中心點到邊的概率(因而由四個概率向量)。
假定標簽yyy的最小值為y0y_0y0?最大值為yny_nyn?(y0≤y≤yn,n∈N+y_{0} \leq y \leq y_{n}, n \in \mathbb{N}^{+}y0?≤y≤yn?,n∈N+),而模型預測的y^\hat{y}y^?則可以通過預測的概率分布得到(這里y^\hat{y}y^?同樣滿足y0≤y^≤yny_{0} \leq \hat{y} \leq y_{n}y0?≤y^?≤yn?),計算式如下。需要補充的是,實際上代碼實現(xiàn)是,作者是將y0y_0y0?設置為0,yny_nyn?設置為16的。
y^=∫?∞+∞P(x)xdx=∫y0ynP(x)xdx\hat{y}=\int_{-\infty}^{+\infty} P(x) x \mathrm{~d} x=\int_{y_{0}}^{y_{n}} P(x) x \mathrm{~d} x y^?=∫?∞+∞?P(x)x?dx=∫y0?yn??P(x)x?dx
為了適配卷積神經(jīng)網(wǎng)絡,作者將連續(xù)域上的積分轉(zhuǎn)換為離散表示,具體是將區(qū)間[y0,yn]\left[y_{0}, y_{n}\right][y0?,yn?]離散化為集合{y0,y1,…,yi,yi+1,…,yn?1,yn}\left\{y_{0}, y_{1}, \ldots, y_{i}, y_{i+1}, \ldots, y_{n-1}, y_{n}\right\}{y0?,y1?,…,yi?,yi+1?,…,yn?1?,yn?},集合每個元素間隔為了簡單取1。此時有∑i=0nP(yi)=1\sum_{i=0}^{n} P\left(y_{i}\right)=1∑i=0n?P(yi?)=1,因而估計的回歸值變?yōu)橄率健?span id="ze8trgl8bvbq" class="katex--inline">P(x)P(x)P(x)可以通過Softmax函數(shù)實現(xiàn),因此P(yi)P(y_i)P(yi?)可以記作SiS_iSi?。
y^=∑i=0nP(yi)yi\hat{y}=\sum_{i=0}^{n} P\left(y_{i}\right) y_{i} y^?=i=0∑n?P(yi?)yi?
注意,因為已經(jīng)得到了y^\hat{y}y^?,因此它可以使用L1損失、IoU損失或者GIoU損失來訓練,但是作者分析了一下發(fā)現(xiàn)一個積分目標可能對于無數(shù)種積分模式(如下圖的面積相同的三種分布,顯然第三種最合適,因為最合適的位置如果存在那么與標簽不會相差太遠),這有損學習效率。考慮到真實的分布通常不會距離標注的位置太遠,所以作者又額外加了個loss,希望網(wǎng)絡能夠快速地聚焦到標注位置附近的數(shù)值,使得他們概率盡可能大。
基于此,作者將這個損失取名Distribution Focal Loss (DFL) ,它顯式增大最接近標簽yyy的兩側(cè)的yiy_iyi?和yi+1y_{i+1}yi+1?的概率。此外,由于邊框回歸只考慮正樣本沒有不平衡問題的風險,簡單將QFL的完整交叉熵部分應用過來就行,形成的DFL公式如下。公式中關于SiS_iSi?和Si+1S_{i+1}Si+1?如何能夠接近目標,作者在論文補充材料進行了證明,這里不多贅述。
DFL(Si,Si+1)=?((yi+1?y)log?(Si)+(y?yi)log?(Si+1))\mathbf{D F L}\left(\mathcal{S}_{i}, \mathcal{S}_{i+1}\right)=-\left(\left(y_{i+1}-y\right) \log \left(\mathcal{S}_{i}\right)+\left(y-y_{i}\right) \log \left(\mathcal{S}_{i+1}\right)\right) DFL(Si?,Si+1?)=?((yi+1??y)log(Si?)+(y?yi?)log(Si+1?))
最后,其實歸納可以發(fā)現(xiàn),QFL和DFL可以表示為一個通用的形式,也就是本文的標題由來Generalized Focal Loss (GFL),我這里就簡單給出這個公式,諸多細節(jié)可以閱讀原論文。
GFL(pyl,pyr)=?∣y?(ylpyl+yrpyr)∣β((yr?y)log?(pyl)+(y?yl)log?(pyr))\mathbf{G F L}\left(p_{y_{l}}, p_{y_{r}}\right)=-\left|y-\left(y_{l} p_{y_{l}}+y_{r} p_{y_{r}}\right)\right|^{\beta}\left(\left(y_{r}-y\right) \log \left(p_{y_{l}}\right)+\left(y-y_{l}\right) \log \left(p_{y_{r}}\right)\right) GFL(pyl??,pyr??)=?∣y?(yl?pyl??+yr?pyr??)∣β((yr??y)log(pyl??)+(y?yl?)log(pyr??))
訓練損失
最終的訓練損失如下式,其中LQ\mathcal{L}_{\mathcal{Q}}LQ?表示QFL而LD\mathcal{L}_{\mathcal{D}}LD?表示DFL,而LB\mathcal{L}_{\mathcal{B}}LB?指的是GIoU Loss,NposN_{pos}Npos?表示正樣本數(shù)目,λ0\lambda_{0}λ0?和λ1\lambda_1λ1?是LQ\mathcal{L}_{\mathcal{Q}}LQ?和LD\mathcal{L}_{\mathcal{D}}LD?的平衡權重。在金字塔特征圖的所有位置計算求和。這里的1{cz?>0}\mathbf{1}_{\left\{c_{z}^{*}>0\right\}}1{cz??>0}?為指示函數(shù),當cz?>0c_{z}^{*}>0cz??>0時為1,否則為0。
L=1Npos?∑zLQ+1Npos?∑z1{cz?>0}(λ0LB+λ1LD)\mathcal{L}=\frac{1}{N_{\text {pos }}} \sum_{z} \mathcal{L}_{\mathcal{Q}}+\frac{1}{N_{\text {pos }}} \sum_{z} \mathbf{1}_{\left\{c_{z}^{*}>0\right\}}\left(\lambda_{0} \mathcal{L}_{\mathcal{B}}+\lambda_{1} \mathcal{L}_{\mathcal{D}}\right) L=Npos??1?z∑?LQ?+Npos??1?z∑?1{cz??>0}?(λ0?LB?+λ1?LD?)
實驗
作者進行了一些消融實驗,這里就不細說了,這里直接說明兩個結論。
下圖是單模型單尺度的結果對比,可以看到,GFocal取得了相當亮眼的表現(xiàn)。
此外,也附上和SOTA對比的實驗結果圖。
文章的補充材料也有不少干貨,關于centerness和IoU的對比我就不贅述了,此外作者也進行了分布式邊框表示的可視化,以下圖為例,可視化四個邊的預測分布,可以發(fā)現(xiàn)一個有趣的現(xiàn)象,當傘不算傘柄也就是白色GT框可以定位傘,但是算上傘兵綠色預測框又可以定位傘,概率分布也得確是一個雙峰分布,這其實表達標注和模型對某個物體的兩種理解,這個雙峰分布很有趣,給后來的研究留下了無數(shù)遐想。
總結
這篇文章從表示(representation)這一模型學習的關鍵出發(fā)提出了GFocal,將邊框建模為概率表示極具開創(chuàng)性。論文基于mmdetection實現(xiàn),也很便于源碼的閱讀和使用,是相當亮眼的工作,值得一讀。最后,本文我只是做了一些基本的解讀,更詳細的請參考原論文,如果我的文章對你有所幫助,歡迎一鍵三連,你的支持是我不懈創(chuàng)作的動力。
總結