習(xí)如何解決目標(biāo)檢測(cè)標(biāo)簽噪聲:約束模型下的實(shí)操指南)
以目標(biāo)檢測(cè)里的那些爛標(biāo)簽為切入點(diǎn)。做檢測(cè)項(xiàng)目的人基本都遇到過(guò)這種情況數(shù)據(jù)標(biāo)注回來(lái)肉眼看著框沒(méi)啥問(wèn)題訓(xùn)練出來(lái)的模型卻被某些樣本反復(fù)教壞。分類不對(duì)、框偏了、或者壓根標(biāo)漏了。早期我把這些問(wèn)題歸咎于“數(shù)據(jù)質(zhì)量”后來(lái)發(fā)現(xiàn)光靠清洗沒(méi)過(guò)多久又復(fù)發(fā)源頭在于標(biāo)注噪聲的分布是隱藏的而且檢測(cè)任務(wù)的標(biāo)簽結(jié)構(gòu)遠(yuǎn)比分類復(fù)雜——一個(gè)類別標(biāo)簽錯(cuò)了還牽涉到框的回歸監(jiān)督。直到把置信學(xué)習(xí)引入到帶約束的檢測(cè)流程里標(biāo)簽問(wèn)題才算真正找到了可量化的處理方式。這篇文章就是圍繞“約束模型下的目標(biāo)檢測(cè)置信學(xué)習(xí)”展開的把思路、實(shí)現(xiàn)、參數(shù)選擇、踩坑記錄全部拆開講。適合做檢測(cè)算法落地、正在被標(biāo)注質(zhì)量困擾的工程師也適合想了解置信學(xué)習(xí)在復(fù)雜任務(wù)中怎么落地而不是只看論文的人。核心內(nèi)容會(huì)覆蓋置信學(xué)習(xí)在檢測(cè)任務(wù)里的變體設(shè)計(jì)、約束條件怎么加、標(biāo)簽噪聲如何被識(shí)別和修正以及一套可以直接拿去改造現(xiàn)有訓(xùn)練管線的步驟。1. 為什么要做這件事檢測(cè)任務(wù)的標(biāo)簽噪聲和分類任務(wù)根本不是一回事1.1 分類任務(wù)的置信學(xué)習(xí)為什么不能直接搬到檢測(cè)上置信學(xué)習(xí)最初是為圖像分類設(shè)計(jì)的核心是估計(jì)真實(shí)標(biāo)簽與給定標(biāo)簽之間的聯(lián)合分布。它在CIFAR-10、ImageNet這類數(shù)據(jù)集上效果很好核心思想是對(duì)每個(gè)樣本計(jì)算模型對(duì)每個(gè)類別的預(yù)測(cè)概率然后找出那些“模型自信但標(biāo)簽反而可疑”的樣本。這里的“自信”是相對(duì)概念——比如某個(gè)樣本被模型預(yù)測(cè)為貓的概率是0.9但標(biāo)注寫的是狗那這個(gè)標(biāo)注就值得懷疑。但檢測(cè)任務(wù)完全不是這個(gè)玩法。一個(gè)訓(xùn)練樣本是一整張圖里面有多個(gè)目標(biāo)每個(gè)目標(biāo)同時(shí)有類別標(biāo)簽和邊界框標(biāo)簽。模型輸出的是N個(gè)預(yù)測(cè)框每個(gè)框都有類別概率和位置偏移。分類置信學(xué)習(xí)只處理一個(gè)標(biāo)簽檢測(cè)要處理的是“多個(gè)目標(biāo)的多重標(biāo)簽”分類標(biāo)簽錯(cuò)誤只影響類別檢測(cè)標(biāo)簽錯(cuò)誤還包括框的位置對(duì)不對(duì)、框是否把目標(biāo)包全了。如果直接拿分類版的置信學(xué)習(xí)來(lái)過(guò)濾檢測(cè)樣本一個(gè)框標(biāo)錯(cuò)了會(huì)拖累整張圖被丟掉信息損失極大。1.2 目標(biāo)檢測(cè)標(biāo)簽錯(cuò)誤的常見形態(tài)我在實(shí)際項(xiàng)目里把檢測(cè)標(biāo)簽錯(cuò)誤歸納成了幾類這對(duì)后面設(shè)計(jì)置信學(xué)習(xí)方案至關(guān)重要類別標(biāo)簽錯(cuò)標(biāo)目標(biāo)框本身沒(méi)問(wèn)題但類別標(biāo)錯(cuò)了。比如一張圖里各種瓶子長(zhǎng)得像模型已經(jīng)能區(qū)分了標(biāo)注人員卻標(biāo)反了。這是置信學(xué)習(xí)最容易識(shí)別的類型特征是模型給的類別概率與標(biāo)簽類別明顯不一致??蚧貧w監(jiān)督噪聲框的位置不準(zhǔn)確、邊界超出目標(biāo)實(shí)體、或者框只框住目標(biāo)的一部分。這種錯(cuò)誤對(duì)分類置信分?jǐn)?shù)的干擾不大但回歸頭的梯度會(huì)被帶偏。單靠置信學(xué)習(xí)修剪不了這種錯(cuò)誤需要結(jié)合約束條件判斷——比如框的寬高比、中心點(diǎn)偏離程度、與同類別其他框的重疊情況。漏標(biāo)與誤檢圖中明顯存在但完全沒(méi)標(biāo)的目標(biāo)或者標(biāo)了一個(gè)不存在的目標(biāo)。漏標(biāo)導(dǎo)致訓(xùn)練時(shí)該區(qū)域被當(dāng)成背景模型學(xué)到“這地方?jīng)]目標(biāo)”誤檢導(dǎo)致模型學(xué)到錯(cuò)誤的特征對(duì)應(yīng)關(guān)系。少數(shù)類整體標(biāo)注質(zhì)量差數(shù)量少的類別標(biāo)注人員不熟悉錯(cuò)誤比例往往更高。這類噪聲對(duì)模型的影響被放大因?yàn)槟P鸵娺^(guò)的正樣本本來(lái)就少。這些錯(cuò)誤類型決定了置信學(xué)習(xí)不能只做一個(gè)“篩選干凈樣本”的角色還要能輸出“哪些標(biāo)簽需要修正”的提示甚至直接用于輔助標(biāo)注復(fù)核。1.3 約束模型在這里的含義所謂“約束模型”是指通過(guò)顯式規(guī)則約束模型輸出的空間范圍把置信學(xué)習(xí)從“事后過(guò)濾”變成“訓(xùn)練中可控的修正機(jī)制”。檢測(cè)任務(wù)天然存在約束——每個(gè)錨點(diǎn)只負(fù)責(zé)特定尺度和寬高比的區(qū)域、NMS之后每個(gè)目標(biāo)只能有一個(gè)框、類別之間互斥。這些約束給出的信息讓置信學(xué)習(xí)有機(jī)會(huì)在“圖像-標(biāo)簽”之外引入“目標(biāo)-約束規(guī)則”的維度更精確地判斷標(biāo)簽問(wèn)題的來(lái)源。這里說(shuō)的約束至少可以分三層匹配約束每個(gè)真實(shí)框只能匹配一個(gè)或多個(gè)錨點(diǎn)丟失匹配會(huì)帶來(lái)背景回歸壓力、幾何約束框的坐標(biāo)必須落在圖像范圍內(nèi)寬高比和實(shí)際物體形狀應(yīng)一致、類別約束一張圖里同一實(shí)例的類別語(yǔ)義應(yīng)該是穩(wěn)定的不會(huì)因?yàn)楣庹兆兓团谐闪硪环N。把這些約束的信號(hào)納入置信學(xué)習(xí)的計(jì)數(shù)矩陣?yán)锬艽蠓档蛯?duì)小目標(biāo)和不清晰目標(biāo)的誤判。2. 整體流程設(shè)計(jì)置信學(xué)習(xí)在檢測(cè)管線上如何排布2.1 流程概覽我把置信學(xué)習(xí)放到訓(xùn)練閉環(huán)里的位置做了多次調(diào)整。最終穩(wěn)定采用的是“訓(xùn)練-預(yù)測(cè)-聯(lián)合分布估計(jì)-標(biāo)簽清洗-微調(diào)”的循環(huán)結(jié)構(gòu)。整體流程大致如下用初始模型可以是被噪聲標(biāo)簽訓(xùn)練的模型在訓(xùn)練集上做前向推理保存每個(gè)預(yù)測(cè)框的類別置信度向量。將預(yù)測(cè)框與真實(shí)標(biāo)注框做匹配按IoU閾值和類別條件建立對(duì)應(yīng)關(guān)系計(jì)算每個(gè)目標(biāo)的“一致度分?jǐn)?shù)”。構(gòu)建目標(biāo)的計(jì)數(shù)矩陣統(tǒng)計(jì)“標(biāo)注為類別i但模型預(yù)測(cè)為類別j”的目標(biāo)數(shù)量同時(shí)結(jié)合框的回歸偏差和約束違例情況做加權(quán)。應(yīng)用置信學(xué)習(xí)的剪枝算法找出置信度低但標(biāo)簽卻高置信的樣本也就是標(biāo)簽問(wèn)題樣本生成可疑樣本列表。對(duì)可疑樣本進(jìn)行復(fù)核修正修正后的標(biāo)簽參與下一輪訓(xùn)練未被修正的高置信樣本繼續(xù)參與訓(xùn)練不丟棄。這個(gè)流程里最關(guān)鍵的設(shè)計(jì)是第二步——預(yù)測(cè)框與真實(shí)框的匹配。檢測(cè)輸出的N個(gè)預(yù)測(cè)框和M個(gè)真實(shí)標(biāo)注框不一定一一對(duì)應(yīng)NMS之后有些目標(biāo)可能沒(méi)有匹配到預(yù)測(cè)框有些預(yù)測(cè)框可能匹配到了錯(cuò)誤的真實(shí)框。如果匹配錯(cuò)了置信分?jǐn)?shù)的比較就失去了意義。2.2 基于IoU的匹配策略設(shè)計(jì)匹配策略我采用的是“先按類別約束匹配再按IoU約束篩選”的二級(jí)匹配。對(duì)每個(gè)真實(shí)框先在同類別的預(yù)測(cè)框里找IoU最大的候選如果最大IoU不低于閾值默認(rèn)0.5小目標(biāo)建議降到0.3則建立匹配關(guān)系否則標(biāo)記為“無(wú)預(yù)測(cè)匹配”。這里有一個(gè)容易忽略的問(wèn)題哪些預(yù)測(cè)框應(yīng)該參與置信度計(jì)算我的選擇是讓NMS之前的候選框參與而不是NMS之后的最終輸出。原因在于NMS會(huì)把低置信度的重疊框抑制掉但這些被抑制的框恰恰能反映模型在這個(gè)位置“到底有沒(méi)有看到目標(biāo)”。置信學(xué)習(xí)需要的是raw prediction不是后處理結(jié)果。舉個(gè)例子一個(gè)目標(biāo)真實(shí)類別是貓模型在它上面生成了三個(gè)候選框置信度分別為0.8、0.7、0.6類別概率都是貓。這說(shuō)明模型對(duì)這個(gè)目標(biāo)很確定。但如果NMS后只剩下置信度0.8的那個(gè)框而標(biāo)注卻是狗置信學(xué)習(xí)就完全看不出問(wèn)題了。保留候選框能提供更豐富的概率分布信息代價(jià)是計(jì)算量會(huì)變大但換來(lái)的是更可靠的標(biāo)簽質(zhì)量判斷這筆賬是劃算的。2.3 匹配后的每個(gè)目標(biāo)如何表示匹配完成后每個(gè)目標(biāo)會(huì)得到一組特征標(biāo)簽類別標(biāo)注時(shí)寫下的類別模型預(yù)測(cè)分布與這個(gè)目標(biāo)匹配的所有預(yù)測(cè)框的類別概率做加權(quán)平均或取最大置信度最大IoU預(yù)測(cè)框與真實(shí)框覆蓋程度幾何偏差中心點(diǎn)距離、寬高比差異約束違例標(biāo)記如是否越界、是否與同類別其他目標(biāo)大面積重疊這些特征會(huì)全部送到置信學(xué)習(xí)的統(tǒng)計(jì)模塊里。分類置信學(xué)習(xí)只用“標(biāo)簽類別”和“預(yù)測(cè)分布”檢測(cè)置信學(xué)習(xí)多了幾何偏差和約束違例這讓檢測(cè)標(biāo)簽錯(cuò)誤的判斷不僅看“類別對(duì)不對(duì)”還看“框畫得好不好”。3. 核心細(xì)節(jié)置信學(xué)習(xí)的關(guān)鍵指標(biāo)與參數(shù)計(jì)算3.1 置信分?jǐn)?shù)的計(jì)算方式置信學(xué)習(xí)的核心是估計(jì)每個(gè)樣本的“真實(shí)標(biāo)簽概率”。分類任務(wù)里常用的方法是先統(tǒng)計(jì)計(jì)數(shù)矩陣再歸一化為聯(lián)合分布。檢測(cè)任務(wù)里我給每個(gè)目標(biāo)定義了組合置信分?jǐn)?shù)置信分?jǐn)?shù) 模型預(yù)測(cè)正確類別的概率 × IoU質(zhì)量因子 × 幾何約束因子模型預(yù)測(cè)正確類別的概率直接取匹配到的預(yù)測(cè)框中的最大類別概率。IoU質(zhì)量因子設(shè)計(jì)成一個(gè)分段函數(shù)IoU大于0.7時(shí)取10.4到0.7之間時(shí)取IoU值本身小于0.4時(shí)取0.1。幾何約束因子則由中心點(diǎn)偏移和寬高比偏差構(gòu)成——中心點(diǎn)偏移距離除以目標(biāo)短邊長(zhǎng)度偏差越小因子越接近1。這個(gè)公式的原則是如果一個(gè)目標(biāo)模型認(rèn)得準(zhǔn)類別概率高、框貼合好IoU高、位置形態(tài)符合約束那么這個(gè)樣本的標(biāo)簽大概率是正確的反過(guò)來(lái)任何一個(gè)維度出問(wèn)題置信分?jǐn)?shù)都會(huì)被壓低。3.2 計(jì)數(shù)矩陣與聯(lián)合分布估計(jì)有了每個(gè)目標(biāo)的置信分?jǐn)?shù)下一步是構(gòu)建計(jì)數(shù)矩陣C。矩陣的行是“給定標(biāo)簽類別”列是“模型預(yù)測(cè)類別”。按置信學(xué)習(xí)方法的標(biāo)準(zhǔn)做法對(duì)每個(gè)目標(biāo)如果模型預(yù)測(cè)的最可能類別與標(biāo)簽類別不同就在對(duì)應(yīng)單元格累加該目標(biāo)的置信分?jǐn)?shù)。這里選擇累加分?jǐn)?shù)而不是直接計(jì)數(shù)能減少模糊樣本的干擾。然后做歸一化得到聯(lián)合分布Q。具體計(jì)算方式是用計(jì)數(shù)矩陣除以樣本總數(shù)再用類先驗(yàn)概率修正。修正公式如下先計(jì)算各類的真實(shí)占比P(y* j) Σ_i Q_ij 。然后用它替換計(jì)數(shù)矩陣的列和得到修正后的聯(lián)合分布 Q_ij C_ij / Σ_j C_ij × P(y* j) 。這一步的作用是對(duì)類別不平衡做補(bǔ)償。如果背景類或某個(gè)大類占據(jù)了絕大多數(shù)樣本直接按計(jì)數(shù)判斷會(huì)讓小類樣本的標(biāo)簽問(wèn)題幾乎不可能被發(fā)現(xiàn)。歸一化到聯(lián)合分布后小類的異常標(biāo)簽仍然能被識(shí)別出來(lái)。3.3 剪枝策略誰(shuí)才是真正的問(wèn)題標(biāo)簽置信學(xué)習(xí)里最經(jīng)典的剪枝策略是對(duì)每個(gè)標(biāo)簽為類別i的樣本計(jì)算自置信度——即模型預(yù)測(cè)為類別i的概率——以及他類別置信度——即模型預(yù)測(cè)為其他類別的最大概率。如果自置信度低且他類別置信度高則標(biāo)記為“標(biāo)簽疑似錯(cuò)誤”。檢測(cè)場(chǎng)景下我做了兩個(gè)改進(jìn)。第一剪枝判斷的閾值不是固定值而是與類別有關(guān)。對(duì)于模型整體表現(xiàn)好的類別閾值可以設(shè)高一點(diǎn)0.7對(duì)于容易混淆的類別比如形狀相近的物體閾值降到0.5。第二增加“約束違例優(yōu)先”規(guī)則——只要一個(gè)目標(biāo)滿足以下任一條件就無(wú)條件進(jìn)入疑似列表幾何偏差超過(guò)閾值、真實(shí)框越界超過(guò)一定比例、與另一個(gè)同類別框重疊IoU超過(guò)0.8且類別不同。剪枝的目標(biāo)不是追求百分之百準(zhǔn)確而是盡量找出所有值得人工復(fù)核的目標(biāo)。哪怕誤報(bào)一部分人工復(fù)核的成本通常低于標(biāo)注重新來(lái)一遍的成本。我寧可召回率高一點(diǎn)也不想漏掉真正影響模型收斂的壞標(biāo)簽。3.4 為什么閾值不能照搬分類場(chǎng)景分類置信學(xué)習(xí)的開源實(shí)現(xiàn)里閾值是自動(dòng)計(jì)算的根據(jù)置信度分布的雞尾酒會(huì)算法之類的方式推出來(lái)。檢測(cè)任務(wù)中直接套用這些值會(huì)發(fā)現(xiàn)兩個(gè)問(wèn)題。第一個(gè)問(wèn)題是檢測(cè)框的置信度天然偏低。目標(biāo)檢測(cè)模型輸出的置信度在經(jīng)過(guò)Focal Loss或OHEM訓(xùn)練后分布和分類模型完全不同大量高質(zhì)量正樣本的置信度也可能只有0.6到0.8。如果沿用分類場(chǎng)景的絕對(duì)值閾值比如0.9會(huì)誤傷大量正常樣本。我的做法是先跑一次“置信度分布統(tǒng)計(jì)”把每個(gè)類別下所有匹配目標(biāo)的自置信度排序取分位點(diǎn)做參考——比如第20百分位數(shù)以下的目標(biāo)重點(diǎn)觀察而不是硬套固定數(shù)字。第二個(gè)問(wèn)題是決定標(biāo)簽是否錯(cuò)誤的依據(jù)不只是“模型信不信”還要看“模型信得對(duì)不對(duì)”。前面說(shuō)到的約束因子在這里起作用一個(gè)目標(biāo)模型置信度很高但框嚴(yán)重越界或者寬高比異常離譜那大概率不是模型的問(wèn)題而是框標(biāo)注本身就不對(duì)。置信學(xué)習(xí)原本擅長(zhǎng)的領(lǐng)域是“分類標(biāo)簽錯(cuò)”檢測(cè)場(chǎng)景結(jié)合幾何約束后還多了“定位標(biāo)簽錯(cuò)”這個(gè)維度。4. 實(shí)操記錄用一個(gè)模擬檢測(cè)項(xiàng)目跑通完整流程4.1 項(xiàng)目背景與數(shù)據(jù)情況我在一個(gè)模擬的目標(biāo)檢測(cè)項(xiàng)目X上做了實(shí)驗(yàn)對(duì)比。數(shù)據(jù)集包含大約3萬(wàn)張圖像5個(gè)類別包括與背景相似度很高的兩類小型物體。標(biāo)注由一個(gè)團(tuán)隊(duì)完成整體噪聲比例估算在8%左右。前面模型訓(xùn)練時(shí)發(fā)現(xiàn)驗(yàn)證集性能在幾個(gè)特定類別上始終無(wú)法提升把訓(xùn)練集可視化排查后確認(rèn)存在成批的標(biāo)簽錯(cuò)誤。我沒(méi)有讓團(tuán)隊(duì)全部重新標(biāo)注而是按狀態(tài)選擇了1500個(gè)高置信可疑目標(biāo)、300個(gè)邊界情況目標(biāo)、50個(gè)確認(rèn)無(wú)誤的正常目標(biāo)組成復(fù)核集。這個(gè)選擇是有講究的如果只復(fù)核“最可疑”的確實(shí)能快速清理一批臟數(shù)據(jù)但容易洗過(guò)頭把正常樣本的分布也改變了導(dǎo)致模型過(guò)擬合到更小的數(shù)據(jù)集上。混入少量確認(rèn)正常的目標(biāo)是為了保持標(biāo)注標(biāo)準(zhǔn)的延續(xù)性。4.2 第一階段初始模型推理與目標(biāo)匹配用當(dāng)前版本的檢測(cè)模型對(duì)整個(gè)訓(xùn)練集做推理保存所有候選框的類別概率和坐標(biāo)。推理時(shí)的輸入尺寸和訓(xùn)練時(shí)保持一致不做多尺度增強(qiáng)以免置信度分布失真。多尺度推理會(huì)讓模型對(duì)不同尺寸目標(biāo)的置信度差異被平均掉一些本來(lái)就模糊的小目標(biāo)反而顯得“可信”這會(huì)給后續(xù)剪枝帶來(lái)虛假信號(hào)。匹配過(guò)程的代碼思路大致如下def match_predictions_to_gt(pred_boxes, pred_scores, pred_labels, gt_boxes, gt_labels, iou_thres0.5): matches [] for gt_idx, (gt_box, gt_label) in enumerate(zip(gt_boxes, gt_labels)): valid_mask (pred_labels gt_label) # 先按類別限定 if not any(valid_mask): matches.append({gt_idx: gt_idx, pred_info: None}) continue candidate_boxes pred_boxes[valid_mask] candidate_scores pred_scores[valid_mask] candidate_labels pred_labels[valid_mask] ious compute_iou(gt_box, candidate_boxes) best_idx ious.argmax() if ious[best_idx] iou_thres: matches.append({ gt_idx: gt_idx, pred_info: { box: candidate_boxes[best_idx], score: candidate_scores[best_idx], label: candidate_labels[best_idx], iou: ious[best_idx], } }) else: matches.append({gt_idx: gt_idx, pred_info: None}) return matches注意pred_scores存的是每個(gè)候選框在所有類別上的概率向量而不是只存最后輸出的類別置信度。這一步我沒(méi)在圖里體現(xiàn)全貌寫代碼時(shí)要用完整的向量做后續(xù)置信度查詢。4.3 第二階段置信分?jǐn)?shù)與計(jì)數(shù)矩陣構(gòu)建對(duì)每個(gè)匹配成功的目標(biāo)計(jì)算組合置信分?jǐn)?shù)。關(guān)鍵參數(shù)設(shè)置如下IoU閾值0.5目標(biāo)短邊小于32像素的IoU閾值降到0.3中心點(diǎn)偏移容忍度目標(biāo)短邊的25%寬高比偏差容忍度標(biāo)簽寬高比與預(yù)測(cè)框?qū)捀弑鹊膸缀尉挡町惓^(guò)2倍時(shí)幾何因子顯著降低這里有一個(gè)很值得說(shuō)的細(xì)節(jié)小目標(biāo)的IoU閾值為什么要降低。小目標(biāo)本身的像素面積小預(yù)測(cè)框和真實(shí)框哪怕只有一個(gè)像素的偏移IoU就會(huì)掉得很厲害。如果用統(tǒng)一閾值小目標(biāo)幾乎全部會(huì)進(jìn)入“低置信度”區(qū)間剪枝會(huì)把它們誤判成壞標(biāo)簽。我把小目標(biāo)單獨(dú)處理之后識(shí)別出的“問(wèn)題樣本”里小目標(biāo)的比例從之前的56%降到了接近數(shù)據(jù)集中小目標(biāo)自然占比的水平。這一步直接影響了清洗效果數(shù)據(jù)分布保住了。4.4 第三階段剪枝結(jié)果與人工復(fù)核剪枝后得到的疑似問(wèn)題目標(biāo)大約占總目標(biāo)的4.7%這個(gè)比例低于整體噪聲比例的8%是因?yàn)椴糠衷肼晿?biāo)簽并沒(méi)有被模型“看出問(wèn)題”——模型自己也分不清自然無(wú)法提示。這符合預(yù)期置信學(xué)習(xí)能抓的是模型已經(jīng)具備區(qū)分能力、但標(biāo)簽跟不上的那一部分噪聲。人工復(fù)核時(shí)我采用了三遍獨(dú)立復(fù)核的方式兩個(gè)復(fù)核員分別獨(dú)立判斷再由一個(gè)技術(shù)負(fù)責(zé)人抽查沖突項(xiàng)。最終統(tǒng)計(jì)顯示剪枝列表里約有81%的目標(biāo)確實(shí)存在標(biāo)簽問(wèn)題其中類別錯(cuò)標(biāo)占了一半框位置不準(zhǔn)占三成其余是漏標(biāo)和誤檢。對(duì)照初始8%的噪聲比例這一輪清洗把訓(xùn)練集中的典型問(wèn)題標(biāo)簽削減了約一半剩下的一半是模型尚未學(xué)會(huì)區(qū)分的那部分通過(guò)后續(xù)迭代逐漸暴露。清洗后的標(biāo)簽修正方式我分了三類類別錯(cuò)誤直接修正類別框位置不準(zhǔn)確則重新標(biāo)注邊界框漏標(biāo)的目標(biāo)直接從該訓(xùn)練樣本里移除對(duì)應(yīng)位置的匹配監(jiān)督。沒(méi)有采用“直接刪掉整張圖”的粗暴方案盡可能保留有效信息。4.5 訓(xùn)練效果對(duì)比用同一份數(shù)據(jù)、同樣的訓(xùn)練配置對(duì)比“什么都不做”和“跑完置信學(xué)習(xí)清洗后再去微調(diào)”兩組模型在驗(yàn)證集上的mAP從62.4%提升到67.8%。提升最明顯的是那兩個(gè)本來(lái)就容易混淆的類別各自提升了5到6個(gè)百分點(diǎn)其余類別也有小幅提升。訓(xùn)練日志上還觀察到兩個(gè)意外收獲清洗后訓(xùn)練損失的前幾輪下降曲線更平滑說(shuō)明沖突梯度變少了模型在高IoU閾值下的召回率提升尤其明顯因?yàn)榭蚧貧w監(jiān)督變準(zhǔn)確了。這里的對(duì)比案例是模擬的數(shù)字本身不具備普遍性但方向是一致的標(biāo)簽噪聲是檢測(cè)模型性能上限的隱形瓶頸尤其是混淆類別和少數(shù)類清洗帶來(lái)的邊際收益遠(yuǎn)高于調(diào)整模型結(jié)構(gòu)。5. 常見問(wèn)題與排查技巧實(shí)錄5.1 置信學(xué)習(xí)迭代后誤報(bào)樣本為什么越來(lái)越多這是最容易遇到的坑。第一輪清洗后模型變好了第二輪再跑置信學(xué)習(xí)時(shí)新模型對(duì)舊標(biāo)簽的預(yù)測(cè)置信度普遍提高原本在置信邊界上的樣本會(huì)變得“更自信”。如果你繼續(xù)用同樣的閾值誤報(bào)會(huì)暴增。排查思路是每一輪運(yùn)行置信學(xué)習(xí)時(shí)都要重新統(tǒng)計(jì)當(dāng)前模型的自置信度分布按分位點(diǎn)而不是固定閾值去選擇疑似樣本。我一般每輪都重新計(jì)算“自置信度第5百分位和第20百分位”把閾值設(shè)置為動(dòng)態(tài)的。同時(shí)建議每輪清洗的比例控制在訓(xùn)練集總量的3%到5%以內(nèi)超過(guò)這個(gè)比例說(shuō)明模型能力不足清洗出來(lái)的結(jié)果可信度會(huì)下降。5.2 類別極其不平衡時(shí)計(jì)數(shù)矩陣失真怎么辦之前做的一個(gè)數(shù)據(jù)集中某一類占全部目標(biāo)的三成另一類只占百分之零點(diǎn)幾。置信學(xué)習(xí)的計(jì)數(shù)矩陣?yán)镄☆悗缀鯖](méi)有足夠的樣本來(lái)形成穩(wěn)定的分布估計(jì)剪枝結(jié)果幾乎是隨機(jī)噪聲。我的解決辦法是對(duì)小類做“復(fù)制補(bǔ)償”——在小類上做簡(jiǎn)單的過(guò)采樣用數(shù)據(jù)處理的方式讓計(jì)數(shù)矩陣?yán)锏臉颖玖窟_(dá)到最小統(tǒng)計(jì)需求。過(guò)采樣只作用于置信學(xué)習(xí)統(tǒng)計(jì)階段不參與訓(xùn)練數(shù)據(jù)增強(qiáng)也不改變訓(xùn)練集分布。另外對(duì)大類尤其背景類的計(jì)數(shù)做降權(quán)處理權(quán)重設(shè)為0.2到0.5之間避免大類主導(dǎo)聯(lián)合分布。這個(gè)補(bǔ)償操作看著像是“作弊”實(shí)際上是把統(tǒng)計(jì)上的先驗(yàn)偏差做掉讓置信學(xué)習(xí)真正關(guān)注結(jié)構(gòu)性的標(biāo)簽錯(cuò)誤而不是類別頻率差異。5.3 連續(xù)多幀或相似樣本被重復(fù)標(biāo)記為問(wèn)題樣本是否要全部修正在視頻或者連續(xù)采集的圖像數(shù)據(jù)里同一個(gè)目標(biāo)經(jīng)常出現(xiàn)在多幀中標(biāo)注錯(cuò)誤也會(huì)在幀間保持一致性。置信學(xué)習(xí)會(huì)把每一幀里的同一個(gè)目標(biāo)都標(biāo)記為疑似問(wèn)題如果不加區(qū)分全部修正會(huì)破壞目標(biāo)在幀間的一致性。這里我采用了多數(shù)投票機(jī)制對(duì)于特征相似且位置接近的目標(biāo)跨幀去重如果同一目標(biāo)在超過(guò)60%的幀里被標(biāo)記為疑似問(wèn)題才將其標(biāo)記為需要修正否則視為偶發(fā)噪聲暫時(shí)不動(dòng)。這個(gè)策略避免了“一幀的錯(cuò)誤擴(kuò)散到整個(gè)序列”的連鎖反應(yīng)也減少了人工復(fù)核的重復(fù)勞動(dòng)。5.4 模型自己都分不清的類別置信學(xué)習(xí)還有用嗎有但作用會(huì)從“清洗標(biāo)簽”變成“發(fā)現(xiàn)困難樣本”。模型在幾個(gè)類別之間來(lái)回?fù)u擺時(shí)這類樣本的自置信度和置信度之間的差距不會(huì)很大剪枝拿不準(zhǔn)。這時(shí)候把置信學(xué)習(xí)的用途切換一下——不用于過(guò)濾而用于聚類分析。把模型輸出的概率向量降維投影觀察標(biāo)簽類別邊界上的樣本分布。如果發(fā)現(xiàn)某些區(qū)域的樣本標(biāo)簽類別分布與概率分布明顯不一致說(shuō)明這些區(qū)域需要增加標(biāo)注規(guī)范說(shuō)明或者補(bǔ)充更多相似樣本。我在一個(gè)項(xiàng)目里用這個(gè)方法定位了一組“經(jīng)常在兩類之間跳變”的目標(biāo)進(jìn)而發(fā)現(xiàn)是標(biāo)注規(guī)范里對(duì)某類物體的定義邊界寫得模糊。修改規(guī)范并重新標(biāo)注該子集后訓(xùn)練效果提升比直接加數(shù)據(jù)還明顯。6. 約束設(shè)計(jì)的經(jīng)驗(yàn)與擴(kuò)展思考6.1 約束條件不是越多越好我早期嘗試過(guò)加入大量約束條件尺寸約束、位置先驗(yàn)約束、目標(biāo)間互斥約束、類別共現(xiàn)約束等等。結(jié)果之一是疑似樣本列表變得極其龐大因?yàn)槿魏我豁?xiàng)約束被違反都會(huì)直接標(biāo)記嫌疑。人工復(fù)核成本飆升但實(shí)際有效占比并沒(méi)有顯著提升。最終保留下來(lái)并證明有效的約束只有三個(gè)單目標(biāo)匹配約束一個(gè)真實(shí)框最多對(duì)應(yīng)一個(gè)主預(yù)測(cè)框、幾何合理性約束框不越界且形狀合理、同類別重疊約束同一類別目標(biāo)不應(yīng)大面積重疊。越界和重疊在語(yǔ)義上很直觀——越界說(shuō)明框是亂畫的重疊說(shuō)明一個(gè)目標(biāo)可能被重復(fù)標(biāo)注了。其他花哨的約束均因收益低而移除。約束設(shè)計(jì)的核心準(zhǔn)則是“規(guī)則本身必須能直接指出標(biāo)簽的錯(cuò)誤類型”而不是“讓模型看起來(lái)更規(guī)范”。6.2 置信學(xué)習(xí)與主動(dòng)學(xué)習(xí)的結(jié)合在實(shí)際項(xiàng)目中置信學(xué)習(xí)篩選出來(lái)的“疑似問(wèn)題樣本”恰好也是主動(dòng)學(xué)習(xí)想要挑選的“困難樣本”。兩者有交集但不完全重合。置信學(xué)習(xí)的重點(diǎn)是找“模型確定但標(biāo)簽不確定”的樣本主動(dòng)學(xué)習(xí)的重點(diǎn)是找“模型不確定”的樣本。這兩種樣本對(duì)訓(xùn)練的價(jià)值不同前者的修正能糾正錯(cuò)誤監(jiān)督后者的標(biāo)注能增加信息量。推薦的做法是先把置信學(xué)習(xí)的疑似列表送人工修正修正完成后重新訓(xùn)練下一輪用訓(xùn)練好的模型計(jì)算熵對(duì)熵值高的非疑似樣本做第二輪主動(dòng)標(biāo)注。這樣兩輪標(biāo)注成本都沒(méi)有浪費(fèi)每一輪都針對(duì)不同的問(wèn)題。組織標(biāo)注資源時(shí)這種結(jié)合能讓相同的預(yù)算產(chǎn)生更大的性能收益。6.3 部署階段的延伸使用訓(xùn)練完成后置信學(xué)習(xí)的思想同樣可以用在模型上線后的數(shù)據(jù)回流環(huán)節(jié)。新采集的數(shù)據(jù)沒(méi)有標(biāo)簽時(shí)模型推理出的高置信度結(jié)果可以自動(dòng)進(jìn)入“偽標(biāo)簽”池但高置信度不等于高可靠性。把模型輸出的概率向量和約束規(guī)則結(jié)合起來(lái)對(duì)接入的樣本做一致性檢查一致性高的歸入自動(dòng)標(biāo)注池一致性低的送人工復(fù)核。這個(gè)流程本質(zhì)上就是一個(gè)簡(jiǎn)化版的約束模型置信學(xué)習(xí)但運(yùn)行在推理階段。從這個(gè)角度看置信學(xué)習(xí)不只是訓(xùn)練前的數(shù)據(jù)清洗工具而是一套貫穿數(shù)據(jù)生命周期的質(zhì)量監(jiān)控機(jī)制。只要模型具備一定的判別能力它對(duì)標(biāo)簽質(zhì)量的判斷就有參考價(jià)值模型越好這個(gè)機(jī)制越敏銳形成正循環(huán)。7. 關(guān)鍵實(shí)用建議總結(jié)從模型結(jié)構(gòu)調(diào)優(yōu)轉(zhuǎn)向數(shù)據(jù)質(zhì)量治理時(shí)最容易犯的錯(cuò)誤就是期待一次清洗解決所有問(wèn)題。我把這幾個(gè)反復(fù)驗(yàn)證過(guò)的建議放在最后置信學(xué)習(xí)跑完務(wù)必抽樣復(fù)核別直接拿清洗結(jié)果去重訓(xùn)。自動(dòng)化輸出可能有系統(tǒng)性偏差人工復(fù)核是唯一能兜底的環(huán)節(jié)。小目標(biāo)的參數(shù)一定要單獨(dú)設(shè)置統(tǒng)一閾值會(huì)毀掉小目標(biāo)的分布。剪枝比例控制在總量5%以內(nèi)超過(guò)這個(gè)數(shù)字要懷疑你的模型能力或者標(biāo)注質(zhì)量是不是存在更大的結(jié)構(gòu)性問(wèn)題。每次清洗后重新統(tǒng)計(jì)置信度分布動(dòng)態(tài)調(diào)整閾值不要鎖定一套參數(shù)走天下??蚧貧w噪聲是檢測(cè)場(chǎng)景里占比很高的標(biāo)簽錯(cuò)誤別只看類別置信度幾何約束因子一定要參與評(píng)分。我個(gè)人在做這些實(shí)踐時(shí)最大體會(huì)是標(biāo)簽噪聲不是一個(gè)需要一次性解決干凈的問(wèn)題而是一個(gè)需要在訓(xùn)練閉環(huán)里持續(xù)管理的量。置信學(xué)習(xí)給了這套體系一個(gè)可計(jì)算、可解釋的抓手讓每一次數(shù)據(jù)修正都有據(jù)可循。你在檢測(cè)項(xiàng)目里被標(biāo)簽坑過(guò)的話試試把這個(gè)流程接進(jìn)你的訓(xùn)練管線大概率會(huì)回來(lái)感謝這段經(jīng)驗(yàn)的。