模型表現差又難定位,本質是缺乏可歸因的中間量測。本稿提出「先建乾淨對照基準 → 由後往前、逐層切斷」的排查法,把「不準」拆成資料層/標記層/訓練層三個可獨立驗證的問題,並給一張能直接動手的錯誤分析表當收斂工具。
「不準」不是一個問題,是三個問題疊在一起——不先拆開、就只能憑運氣亂改。
只看到「最終輸出錯」,缺乏可歸因的中間訊號,無法判斷錯在哪一層。
從輸出端往回,一層一層假設「這層沒問題」並驗證,直到某層被推翻。
同時改資料又改訓練,永遠定不了位。改一個、量一次、記一次。
沒有一把不會動的尺,改完無法判斷是改善還是運氣。動手前先固定這三件事。
絕不參與訓練/調參,人工逐筆確認標記正確。這是你唯一的真相尺。
每次實驗記下資料版本 / 標記版本 / 超參數 / commit,否則無法歸因。
每輪只動一個東西,量同一把尺,差異才能歸給那個改動。
若 hold-out 沒人工確認、或與訓練集有重複/近似樣本(同一段影片切片分到不同集合),你量出來的分數是假的——上線必崩。先把尺修好,再談模型。
先假設「模型沒問題,是資料在騙它」,由後往前查。順序=資料 → 標記 → 訓練。
分布、洩漏、垃圾樣本。最常見、最該先查,成本最低。
標記一致性是模型準確率的天花板。人都標不準,模型學不會。
前兩層排除後再查。過擬合/欠擬合、pipeline 對齊、學習率。
假設「模型沒問題,是資料在騙它」。三件事:看分布、看洩漏、看垃圾。
類別是否嚴重不均衡?線上常見場景在訓練集是否夠多?分布偏移=線下高分、線上崩。
同一段影片切片分到不同集合 → 指標虛高、上線崩。影片/連續幀資料極常見。
抽 50–100 筆看壞圖、空標、錯類、重複。最笨但最有效的一招。
標記錯誤直接設定模型準確率的天花板——人都標不一致的地方,別指望模型學會。
| 手段 | 怎麼做 | 看什麼 |
|---|---|---|
| 雙標重疊 (量一致性) | 抽一批讓兩人(或同一人隔幾天)重標 | 一致率 / IoU / Cohen's Kappa |
| 高信心錯誤回查 (CP 值最高) | 找出模型「很確定卻答錯」的樣本,回頭查標記 | 常常是標記錯,不是模型錯 |
| 檢查規範 | 邊界 case 有沒有書面定義(部分遮擋算不算、模糊算哪類) | 規範不清 → 矛盾訊號 |
把「模型高信心、但答錯」的樣本拉出來逐筆看。這些絕大多數是標記錯或規範模糊——修標記比調模型便宜十倍,且直接抬高天花板。
資料、標記乾淨了還是不準,才動模型。三個動作就能定位大半。
| 診斷 | 怎麼看 | 指向 |
|---|---|---|
| 過擬合 vs 欠擬合 | 看 train loss 與 val loss 曲線 | train 好 val 差 = 過擬合/洩漏;兩者都差 = 容量/特徵/學習率 |
| 能不能背起來 | 拿極小子集(~20 筆)train 到 100% | 背不起來 = pipeline/標記對齊有 bug(label 對不上、前處理錯位),不是模型不夠強 |
| 錯誤分桶 | 測試集錯誤按類別/場景/光線/角度分組 | 錯誤集中某桶 → 該切片資料/標記不足,回到第 1、2 層 |
一個模型連 20 筆都背不到 100%,幾乎可以斷定是 pipeline bug(資料沒對齊 label、augmentation 把標籤弄壞、loss 接錯)——這種 bug 你怎麼調超參都沒用。先過這關再談其他。
把測試集每一筆錯誤列出來,逐筆標歸因。通常一兩百筆就看得出主因——靠證據,不靠感覺。
| 輸入 | 真值標記 | 模型預測 | 信心 | 人工複判:標記對嗎? | 歸因分類 |
|---|---|---|---|---|---|
| img_0142 | yes | no | 0.91 | 標記其實錯了 | 標記錯 |
| img_0377 | helmet | no_helmet | 0.55 | 標記正確 | 模型弱 |
| img_0890 | yes | nv | 0.62 | 遮擋,兩者皆可 | 規範模糊 |
| img_1203 | yes | no | 0.88 | 正確(罕見角度) | 資料缺 |
它把「模型不準」這個不可行動的抱怨,變成「45% 是標記錯、30% 是資料缺、只有 15% 是模型弱」這種可直接排序工作的數字。你會發現大部分時候根本不該去調模型。
常見症狀對應到最可能的層,當快速指路用(仍以 §07 錯誤分析表為準)。
| 症狀 | 最可能病因 | 先查哪層 |
|---|---|---|
| 線下分數高、線上一上就崩 | 資料洩漏 / 分布偏移 | 資料層 |
| 模型很有自信卻答錯 | 標記錯 / 規範矛盾 | 標記層 |
| train loss 降、val loss 不降 | 過擬合(或仍是洩漏) | 訓練層 |
| train loss 都降不下去 | pipeline bug / lr / 容量 | 訓練層 |
| 某類別/某場景特別爛 | 該切片資料或標記不足 | 資料層 |
| 每次重訓結果差很多 | 沒固定種子 / 資料太少 | 基準 |