觀察:多模態(tài)、3D重建與模式識(shí)別落地實(shí)操)
1. 三月的學(xué)術(shù)界在忙什么1.1 大模型之外CV圈的真實(shí)熱點(diǎn)又到三月中旬這大概是計(jì)算機(jī)視覺(jué)方向最熱鬧的一段時(shí)間。CVPR 的投稿周期剛過(guò)NeurIPS 的摘要提交還沒(méi)開(kāi)始大家手里攢著的實(shí)驗(yàn)數(shù)據(jù)剛好到了一個(gè)能拿出來(lái)曬的階段arXiv 上每天刷新的論文數(shù)量肉眼可見(jiàn)地往上沖。我翻了翻 3 月 18 日前后這一批計(jì)算機(jī)視覺(jué)與模式識(shí)別方向的速遞看到的信息密度確實(shí)比平時(shí)高不少尤其是多模態(tài)理解、三維重建、視頻時(shí)序建模這幾條線都出現(xiàn)了不少有意思的工作。很多人會(huì)問(wèn)做計(jì)算機(jī)視覺(jué)到底該盯什么說(shuō)實(shí)話追著頂會(huì)看是最快的路徑。但光看標(biāo)題沒(méi)用得看方法、看實(shí)驗(yàn)設(shè)置、看數(shù)據(jù)選擇甚至看作者在 limitation 里埋了什么伏筆這些才是一個(gè)項(xiàng)目能不能復(fù)現(xiàn)、能不能遷移到你自己場(chǎng)景里的關(guān)鍵。我從這期速遞里抽了幾條主線結(jié)合我自己做項(xiàng)目、帶大作業(yè)的經(jīng)驗(yàn)把值得關(guān)注的東西拆開(kāi)聊一聊。1.2 誰(shuí)該讀這份速遞先說(shuō)清楚這篇文章適合誰(shuí)。如果你是正在做計(jì)算機(jī)視覺(jué)大作業(yè)的學(xué)生想從近期論文里提煉一個(gè)能落地的小項(xiàng)目或者你是剛?cè)胄械乃惴üこ處熛胝艺易约旱募夹g(shù)方向再或者你只是被分配了一個(gè)“調(diào)研最新進(jìn)展”的任務(wù)老板讓你出一份速遞分析——這些都是我寫這篇東西的出發(fā)點(diǎn)。我不會(huì)給你羅列幾十篇論文的標(biāo)題讓你自己猜而是站在一個(gè)“什么都得會(huì)一點(diǎn)的過(guò)來(lái)人”角度告訴你哪幾篇值得精讀、哪個(gè)方向容易出成果、哪些技術(shù)點(diǎn)其實(shí)是在炒冷飯。這樣無(wú)論你是要應(yīng)付大作業(yè)還是真要上手做項(xiàng)目看完都能有一條清晰的路線。2. 近期值得關(guān)注的研究方向速覽2.1 多模態(tài)理解與語(yǔ)言-視覺(jué)對(duì)齊先說(shuō)多模態(tài)。2025 年的計(jì)算機(jī)視覺(jué)早就不是一個(gè)純視覺(jué)的任務(wù)了。CLIP 之后視覺(jué)-語(yǔ)言對(duì)齊成了幾乎所有上層任務(wù)的底座從圖文檢索、視覺(jué)問(wèn)答到開(kāi)放詞匯檢測(cè)全是建立在“圖像特征和文本特征往同一個(gè)空間里映射”這個(gè)假設(shè)之上的。這一期速遞里值得留意的一個(gè)趨勢(shì)是很多工作不再單純追求對(duì)齊空間做得多好而是開(kāi)始關(guān)注細(xì)粒度對(duì)齊和推理能力。什么意思以前 CLIP 能告訴你“這張圖里有一只貓和一只狗”但你說(shuō)不清貓?jiān)谧筮呥€是右邊貓是什么顏色狗和貓誰(shuí)大。現(xiàn)在的視覺(jué)-語(yǔ)言模型開(kāi)始往“看得更細(xì)、說(shuō)得更準(zhǔn)”方向走比如通過(guò)區(qū)域級(jí)的特征對(duì)齊、視覺(jué) token 的交叉注意力增強(qiáng)去細(xì)分畫(huà)面里的實(shí)體和關(guān)系。這種能力對(duì)于做自動(dòng)駕駛場(chǎng)景理解、醫(yī)療影像報(bào)告生成這類專業(yè)任務(wù)來(lái)說(shuō)價(jià)值比單純刷 ImageNet 準(zhǔn)確率高得多。如果你是做大作業(yè)或者入門項(xiàng)目我建議可以試試“圖文檢索 細(xì)粒度描述”這個(gè)組合。數(shù)據(jù)集用 Flickr30k 或者 Visual Genome模型用現(xiàn)成的 CLIP 做底座再在上面加一個(gè)輕量的跨模態(tài)融合模塊。這個(gè)項(xiàng)目難點(diǎn)不在模型結(jié)構(gòu)而在負(fù)樣本構(gòu)造和損失函數(shù)的配比我后面會(huì)細(xì)說(shuō)。2.2 三維視覺(jué)與重建方向三維視覺(jué)在近兩年是真的火核心推手是 3D Gaussian Splatting它幾乎把傳統(tǒng) NeRF 重建的渲染速度提升了一個(gè)量級(jí)。你看 3 月 18 日這批速遞標(biāo)題里帶 3D、Gaussian、NeRF 的文章數(shù)量依舊不少但方向已經(jīng)從“如何重建得更像”轉(zhuǎn)向“如何重建得更快、更可控、更可分”。幾個(gè)值得關(guān)注的點(diǎn)一個(gè)是動(dòng)態(tài)場(chǎng)景重建就是視頻輸入下同時(shí)估計(jì)物體運(yùn)動(dòng)和三維幾何之前要做這事得用復(fù)雜的時(shí)空調(diào)制網(wǎng)絡(luò)現(xiàn)在有人把 3D Gaussians 和光流場(chǎng)結(jié)合在幀間做高斯粒子的位置預(yù)測(cè)速度和效果都好了不少另一個(gè)是可控生成給 3D 高斯?jié)姙R加文本引導(dǎo)讓模型能夠“按描述修改”一個(gè)已有場(chǎng)景里的物體位置或顏色這其實(shí)就是把 diffusion 和 3D 表示耦合在一起。這個(gè)方向做好了后期編輯、虛擬制片、游戲資產(chǎn)生產(chǎn)都是直接受益方。三維方向的坑也很明確數(shù)據(jù)獲取成本高。別以為隨便找個(gè)手機(jī)拍一段視頻就能重建出完美模型真實(shí)場(chǎng)景的光照、反射、遮擋都會(huì)讓優(yōu)化崩掉。如果你只是想做課程項(xiàng)目別一上來(lái)就挑戰(zhàn)整條街拍一個(gè)桌面靜物或者一個(gè)室內(nèi)角落反而更容易出效果。2.3 視頻理解與時(shí)空建模視頻理解這個(gè)方向說(shuō)實(shí)話已經(jīng)沉淀了很多年從雙流網(wǎng)絡(luò)到 3D ConvNet再到現(xiàn)在基于 Video Transformer 的架構(gòu)能挖的經(jīng)典坑都挖了不少。但最近一個(gè)新的變化是大模型開(kāi)始下沉到視頻任務(wù)不只是做分類而是做視頻問(wèn)答、時(shí)序定位、事件推理這一套。這期速遞里有幾篇就是把 LLM 當(dāng)成視頻理解系統(tǒng)的“決策大腦”讓視覺(jué)編碼器抽幀特征再讓語(yǔ)言模型在時(shí)間序列上做推理這個(gè)組合在短視頻審核、體育賽事分析、長(zhǎng)視頻檢索上都有很強(qiáng)的應(yīng)用潛力。實(shí)操方面如果你要用視頻模型做項(xiàng)目建議先搞清楚自己是做離線分析還是實(shí)時(shí)推理。離線分析無(wú)所謂延遲可以用大模型堆精度實(shí)時(shí)推理就得考慮光流是否真的必要、注意力是在時(shí)間維還是空間維上做、多幀輸入怎么壓縮才能不爆顯存。這些決策直接跟你選的 backbone 和推理框架掛鉤別到最后調(diào)優(yōu)的時(shí)候才后悔當(dāng)初沒(méi)考慮實(shí)時(shí)性。2.4 以自監(jiān)督為代表的模式識(shí)別新范式模式識(shí)別這個(gè)詞早就不只是“特征提取分類器”的古老組合了。現(xiàn)在的主流范式是自監(jiān)督預(yù)訓(xùn)練 下游任務(wù)微調(diào)這一套在視覺(jué)領(lǐng)域已經(jīng)徹底站穩(wěn)了腳跟。從 MAE 到 DINOv2從對(duì)比學(xué)習(xí)到掩碼重建自監(jiān)督的方法論迭代很快但核心思想一直沒(méi)變讓模型從大量無(wú)標(biāo)注數(shù)據(jù)里學(xué)到一個(gè)好的特征空間然后再用小規(guī)模標(biāo)注數(shù)據(jù)適配具體任務(wù)。這期速遞里有個(gè)讓我很感興趣的細(xì)節(jié)越來(lái)越多論文開(kāi)始討論自監(jiān)督特征的“可解釋性”也就是中間層的特征圖到底對(duì)應(yīng)了人類的什么視覺(jué)感知。你讓模型自己去學(xué)它確實(shí)能學(xué)到有用的特征但你是否知道它學(xué)到的是顏色、紋理、輪廓還是語(yǔ)義部件這些問(wèn)題的答案直接影響你能不能把預(yù)訓(xùn)練模型遷移到工業(yè)缺陷檢測(cè)這類樣本量很少的場(chǎng)景。如果有時(shí)間我強(qiáng)烈建議跑一遍 DINOv2 的 feature map 可視化你會(huì)對(duì)“特征”這兩個(gè)字有完全不同的理解。3. 模式識(shí)別課題落地的三條主線3.1 大作業(yè)怎么從論文變成可運(yùn)行項(xiàng)目計(jì)算機(jī)視覺(jué)大作業(yè)是很多學(xué)生第一次直面“從論文到代碼”的鴻溝。很多任務(wù)書(shū)會(huì)直接甩給你一篇經(jīng)典論文讓你復(fù)現(xiàn)。但復(fù)現(xiàn)和看懂是兩回事??炊琼樦髡叩乃悸纷咭槐閺?fù)現(xiàn)是把自己放到作者的位置從數(shù)據(jù)、代碼、環(huán)境到訓(xùn)練細(xì)節(jié)每一步都得自己踩一遍。我的建議是不要直接啃原版代碼。頂會(huì)論文的代碼倉(cāng)庫(kù)經(jīng)過(guò)多輪迭代結(jié)構(gòu)往往很工業(yè)級(jí)變量命名隨意數(shù)據(jù)預(yù)處理散落各處新手直接上手很容易懵。正確做法是先通讀論文把框架模塊畫(huà)出來(lái)輸入是什么通過(guò)了哪些層哪些地方有跳躍連接loss 是怎么算的。然后去 GitHub 搜一個(gè)和論文配套的、star 數(shù)量合適的第三方復(fù)現(xiàn)先把端到端的訓(xùn)練跑通。能跑通之后再對(duì)照論文去改結(jié)構(gòu)換成自己的模塊。我見(jiàn)過(guò)太多人卡在“環(huán)境裝不上”“顯存不夠”“跑了一晚上 loss 是 nan”這三個(gè)問(wèn)題上。這些問(wèn)題本身不難解決難的是你不知道該往哪個(gè)方向排查。后面的第四部分我會(huì)專門講排查方法。3.2 工程化要注意的坑從大作業(yè)走向真實(shí)項(xiàng)目你才會(huì)發(fā)現(xiàn)校園代碼和工程代碼之間有一道隱形壁壘。第一個(gè)坑是數(shù)據(jù)管線的魯棒性。論文里的數(shù)據(jù)都是整理好的類別均衡、尺寸統(tǒng)一、命名規(guī)范。真實(shí)數(shù)據(jù)亂七八糟有的圖是黑的有的是旋轉(zhuǎn)的有的標(biāo)注框超出邊界。不做數(shù)據(jù)清洗模型精度直接掉兩三個(gè)點(diǎn)。第二個(gè)坑是模型訓(xùn)練的可復(fù)現(xiàn)性。很多人會(huì)發(fā)現(xiàn)同一個(gè)代碼上午跑和下午跑結(jié)果不一樣。這不是玄學(xué)是隨機(jī)種子、CUDA 的確定性算法、數(shù)據(jù)加載順序帶來(lái)的波動(dòng)。做實(shí)驗(yàn)可以接受波動(dòng)但交付項(xiàng)目不行。至少要做到固定種子、固定 shuffle 順序、固定 dropout 的隨機(jī)狀態(tài)甚至在關(guān)鍵實(shí)驗(yàn)里固定到 cuDNN 的 benchmark 模式。第三個(gè)坑是評(píng)估標(biāo)準(zhǔn)的偏置。準(zhǔn)確率不是萬(wàn)能的。做缺陷檢測(cè)要看召回率做檢索要看 mAP做分割要看 mIoU。你得想清楚業(yè)務(wù)真正關(guān)心的是哪一項(xiàng)指標(biāo)。很多項(xiàng)目最終效果不行不是模型不行是評(píng)估指標(biāo)選錯(cuò)了。3.3 評(píng)估指標(biāo)的解讀方法我見(jiàn)過(guò)太多人拿到測(cè)試結(jié)果后只看最后那個(gè) Acc然后拍腦袋說(shuō)“效果不錯(cuò)”。真實(shí)的評(píng)估沒(méi)那么簡(jiǎn)單。以一個(gè)二分類的工業(yè)質(zhì)檢任務(wù)為例如果缺陷樣本只占 5%你模型把所有樣本都判為正常Acc 也能到 95%看起來(lái)“效果很好”實(shí)際上毫無(wú)卵用。正確的做法是先把混淆矩陣打出來(lái)看真正例、假正例、真負(fù)例、假負(fù)例四個(gè)格子算 Precision、Recall、F1。然后根據(jù)業(yè)務(wù)需要決定你是要保 Precision 還是保 Recall。質(zhì)檢場(chǎng)景里漏檢一件不良品可能帶來(lái)客訴所以通常優(yōu)先保 Recall寧可多誤殺幾個(gè)良品也不能放過(guò)缺陷。這時(shí)候就要調(diào)整分類閾值甚至設(shè)計(jì)一個(gè)“疑似品復(fù)審”流程。在學(xué)術(shù)項(xiàng)目里也一樣。你對(duì)比方法的時(shí)候不要只記得報(bào)告最好的那組數(shù)字要把不同閾值下的 Precision-Recall 曲線畫(huà)出來(lái)看看你的方法是不是在所有閾值區(qū)間都占優(yōu)勢(shì)。我在實(shí)際項(xiàng)目中見(jiàn)過(guò)不少論文表面報(bào)告的數(shù)字很漂亮但你一畫(huà) PR 曲線就會(huì)發(fā)現(xiàn)它在高召回區(qū)間的精密度崩得很厲害這類方法放到真實(shí)場(chǎng)景中根本不敢用。4. 工具、數(shù)據(jù)與復(fù)現(xiàn)經(jīng)驗(yàn)4.1 常用框架與模型庫(kù)更新說(shuō)完了思路聊聊工具?,F(xiàn)在做 CV 實(shí)驗(yàn)PyTorch 還是絕對(duì)的主流幾乎沒(méi)什么可爭(zhēng)論的。哪怕你用 JAX 或者 TensorFlow做起模型并行和移動(dòng)端部署還是會(huì)繞回 PyTorch 生態(tài)。圍繞 PyTorch 的輔助庫(kù)這幾年也成熟得很夸張HuggingFace 的 transformers 早已不限于 NLP里面集成了大量視覺(jué)模型從 ResNet 到 ViT、Swin、DINOv2 都有加載預(yù)訓(xùn)練權(quán)重基本就是一行代碼的事。另一個(gè)值得關(guān)注的是 OpenMMLab 體系的 mmdetection、mmsegmentation、mmpose。這個(gè)體系在做檢測(cè)、分割、關(guān)鍵點(diǎn)任務(wù)時(shí)特別省事配置驅(qū)動(dòng)的訓(xùn)練方式很適合批量實(shí)驗(yàn)。缺點(diǎn)是你得適應(yīng)它的配置覆蓋機(jī)制剛上手會(huì)被那套注冊(cè)器和繼承邏輯繞暈但一旦用順了比手?jǐn)]訓(xùn)練循環(huán)高效得多。如果你要做三維重建方向的實(shí)驗(yàn)?zāi)蔷屠@不開(kāi) gsplat、taichi 這類庫(kù)了。3D Gaussian Splatting 的工程實(shí)現(xiàn)已經(jīng)從最早的純 CUDA 內(nèi)核演進(jìn)到可微渲染庫(kù)一體化復(fù)現(xiàn)速度肉眼可見(jiàn)地快。但注意別貪心直接在服務(wù)器上裝最新版 nightly 包很多時(shí)候穩(wěn)定版反而更省心。4.2 數(shù)據(jù)集選型與使用建議數(shù)據(jù)集是視覺(jué)項(xiàng)目中第一次讓你感受到“理想與現(xiàn)實(shí)的差距”的地方。論文里常用的 CIFAR、ImageNet、COCO 這些數(shù)據(jù)集已經(jīng)做了很好的類別均衡和標(biāo)注清洗拿來(lái)練手很合適。但如果你做的是特定領(lǐng)域項(xiàng)目比如醫(yī)療影像、自動(dòng)駕駛、安防監(jiān)控公開(kāi)數(shù)據(jù)集往往不夠得自己標(biāo)注一份。自己標(biāo)數(shù)據(jù)要控制成本。我建議先做一次“小樣本試標(biāo)”從原始數(shù)據(jù)里隨機(jī)抽 200 張自己標(biāo)一遍記錄每張平均耗時(shí)再評(píng)估目標(biāo)標(biāo)注總量需要多少人力。這一步能幫你提前發(fā)現(xiàn)標(biāo)注標(biāo)準(zhǔn)模糊、圖片質(zhì)量問(wèn)題、類別邊界不清晰這些坑。千萬(wàn)別一上來(lái)就把全部數(shù)據(jù)外包出去標(biāo)標(biāo)完回來(lái)你會(huì)發(fā)現(xiàn)大量標(biāo)注質(zhì)量不合格返工成本更高。數(shù)據(jù)擴(kuò)充也是一個(gè)值得講的話題?,F(xiàn)在的數(shù)據(jù)增強(qiáng)已經(jīng)從簡(jiǎn)單的翻轉(zhuǎn)、裁剪進(jìn)化到 CutMix、Mixup、RandAugment 這類自動(dòng)增強(qiáng)方法。但增強(qiáng)不是越多越好尤其是涉及目標(biāo)檢測(cè)和分割任務(wù)過(guò)度增強(qiáng)會(huì)破壞空間結(jié)構(gòu)導(dǎo)致模型學(xué)到偽影。4.3 復(fù)現(xiàn)論文時(shí)的步驟拆解復(fù)現(xiàn)一篇 CV 論文別急著把代碼跑起來(lái)。先花半天把論文的 pipeline 梳理清楚圖像預(yù)處理流程、模型輸入尺寸、數(shù)據(jù)增強(qiáng)策略、學(xué)習(xí)率與 batch size以及最重要的——loss 的每一項(xiàng)權(quán)重是怎么設(shè)的。把這些信息做成一張表貼在顯眼位置后面調(diào)參就按表走別靠感覺(jué)。然后搭環(huán)境。建議用 conda 單獨(dú)建一個(gè)環(huán)境Python 版本按論文代碼要求來(lái)別用系統(tǒng)全局環(huán)境。PyTorch 的版本和 CUDA 版本要匹配這一步出錯(cuò)會(huì)被一堆底層編譯錯(cuò)誤折磨到懷疑人生。裝完依賴后先跑一個(gè)過(guò)擬合小實(shí)驗(yàn)用訓(xùn)練集的一個(gè) batch 訓(xùn)練到 loss 降到接近零確認(rèn)模型結(jié)構(gòu)本身沒(méi)寫錯(cuò)。這一步能節(jié)省后面排查的大量時(shí)間。接著再上完整訓(xùn)練集按論文設(shè)置跑一個(gè) baseline。如果發(fā)現(xiàn)指標(biāo)和論文對(duì)不上分兩種情況第一差一點(diǎn)點(diǎn)比如差 1 到 2 個(gè)點(diǎn)大概率是數(shù)據(jù)增強(qiáng)、初始化方式或隨機(jī)種子的問(wèn)題第二差得離譜比如差 10 個(gè)點(diǎn)以上那就要回頭檢查模型結(jié)構(gòu)或者數(shù)據(jù)預(yù)處理了。復(fù)現(xiàn)論文的過(guò)程本質(zhì)上就是這種“預(yù)期與實(shí)驗(yàn)差異”的反復(fù)對(duì)齊心態(tài)要穩(wěn)手段要細(xì)。5. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄5.1 訓(xùn)練不收斂這是所有視覺(jué)項(xiàng)目里遇到頻率最高的一個(gè)問(wèn)題具體表現(xiàn)就是 loss 不下降或者下降一會(huì)兒突然飆升到 nan。排查順序我建議這樣走先看學(xué)習(xí)率學(xué)習(xí)率太大是最常見(jiàn)的原因。尤其是用了 ViT 這類結(jié)構(gòu)以后它的訓(xùn)練對(duì)學(xué)習(xí)率非常敏感一個(gè) 1e-3 的初始學(xué)習(xí)率放到 ResNet 上沒(méi)問(wèn)題放 ViT 上可能直接爆掉。遇到不收斂先降 lr比如降到原來(lái)的十分之一試試。再看 loss 的組成部分。如果是多任務(wù)學(xué)習(xí)比如檢測(cè)模型里有分類 loss 和回歸 loss注意它們之間的量級(jí)差異。分類 loss 可能是幾回歸 loss 可能是幾十兩者相加后回歸 loss 主導(dǎo)了梯度分類分支就學(xué)不好。解決辦法很簡(jiǎn)單給兩個(gè)分支設(shè)置合適的權(quán)重或者直接用不確定性加權(quán)的方式自適應(yīng)調(diào)整。最后檢查數(shù)據(jù)。標(biāo)簽錯(cuò)了、數(shù)據(jù)增強(qiáng)過(guò)度導(dǎo)致樣本面目全非、輸入圖片有 NaN 像素這些都會(huì)讓訓(xùn)練跑飛。用一組干凈數(shù)據(jù)做 sanity check 是最快的驗(yàn)證方法。5.2 顯存不足怎么辦顯存不足是另一個(gè)高頻噩夢(mèng)尤其是在做視頻理解、三維重建這類吃顯存的任務(wù)。很多人第一反應(yīng)是降低 batch size這不假但有時(shí)降下來(lái)又會(huì)導(dǎo)致 BN 統(tǒng)計(jì)量不穩(wěn)定模型精度跟著掉。我更建議從四個(gè)方面入手一是輸入分辨率很多項(xiàng)目為了湊論文里的分辨率拼命往 640 甚至 1024 上拉其實(shí)你的任務(wù)并不需要這么高的細(xì)節(jié)降到 512 往往能省出一大半顯存二是混合精度訓(xùn)練PyTorch 自帶的 AMP 在 A100 這類卡上能有接近兩倍的顯存收益模型精度損失基本可以忽略三是梯度累積用小 batch 多次累積后再更新參數(shù)能模擬大 batch 的效果四是模型本身有沒(méi)有冗余比如 ViT 最后一層的 token 數(shù)量是不是可以剪一刀。5.3 數(shù)據(jù)加載瓶頸訓(xùn)練時(shí)顯存還夠但 GPU 利用率上不去一直在 20% 到 30% 徘徊這就是典型的 CPU 數(shù)據(jù)加載瓶頸。表現(xiàn)在項(xiàng)目里就是每一個(gè) epoch 開(kāi)頭要等很久或者訓(xùn)練時(shí) GPU 經(jīng)?!鞍l(fā)呆”。解決方法無(wú)非這幾招把 DataLoader 的 num_workers 調(diào)大從默認(rèn)的 2 調(diào)到 8 或者 16開(kāi)啟 persistent_workers 讓子進(jìn)程不反復(fù)重建用 pin_memory 把數(shù)據(jù)放到頁(yè)鎖定內(nèi)存里減少 CPU 到 GPU 的拷貝時(shí)間。在三維重建這些任務(wù)里數(shù)據(jù)加載還不只是圖片還包括相機(jī)參數(shù)和點(diǎn)云IO 壓力更大。這種情況下可以考慮預(yù)處理緩存把解碼完成的圖片和參數(shù)直接存成內(nèi)存映射格式訓(xùn)練時(shí)直接按索引讀取能快很多。5.4 指標(biāo)虛高的原因最后說(shuō)一個(gè)很隱蔽的問(wèn)題測(cè)試指標(biāo)很高但真實(shí)場(chǎng)景一用就拉胯。我見(jiàn)過(guò)不少案例根本原因是數(shù)據(jù)泄露。比如目標(biāo)檢測(cè)任務(wù)里訓(xùn)練集和測(cè)試集來(lái)自同一批視頻的關(guān)鍵幀時(shí)間上高度相關(guān)模型實(shí)際上“背”到了很多場(chǎng)景特征測(cè)試分?jǐn)?shù)自然好看但換到一段新視頻就原形畢露。解決辦法是劃分?jǐn)?shù)據(jù)時(shí)要按視頻或者場(chǎng)景分而不是按幀隨機(jī)分。還有一種指標(biāo)虛高來(lái)自評(píng)估代碼的 bug。最常見(jiàn)的是在做分類任務(wù)時(shí)測(cè)試階段忘了切到 eval 模式BN 還在用訓(xùn)練時(shí)的滑動(dòng)均值或者 dropout 還在生效推理結(jié)果自帶隨機(jī)性。另一個(gè)更隱蔽的是在做檢測(cè)評(píng)估時(shí)沒(méi)有按類別過(guò)濾把背景類也算進(jìn)去了。這類 bug 往往不容易被發(fā)現(xiàn)因?yàn)槟憧吹街笜?biāo)還挺高很難想到評(píng)估代碼本身有錯(cuò)。所以在我的項(xiàng)目流程里always 保留一個(gè)“不管多忙都要做”的動(dòng)作寫一個(gè)小小的驗(yàn)證集腳本手動(dòng)檢查 50 張測(cè)試圖片的預(yù)測(cè)結(jié)果把框畫(huà)出來(lái)人眼過(guò)一遍。雖然土但真的能擋住不少“指標(biāo)好看、實(shí)際拉胯”的問(wèn)題。結(jié)語(yǔ)經(jīng)驗(yàn)之談我在這一行摸爬滾打這些年最大的體會(huì)是計(jì)算機(jī)視覺(jué)這個(gè)領(lǐng)域看起來(lái)天天有新方向、新模型但底層的判斷力從來(lái)不是看你會(huì)不會(huì)調(diào)庫(kù)而是你能不能把一個(gè)問(wèn)題拆清楚——數(shù)據(jù)夠不夠、任務(wù)準(zhǔn)確定義了嗎、指標(biāo)選對(duì)了嗎、瓶頸在哪一層。學(xué)術(shù)速遞固然要追但追下來(lái)之后還是要回到自己的項(xiàng)目里一支一支實(shí)驗(yàn)去跑一個(gè)坑一個(gè)坑去踩才能真正長(zhǎng)本事。最后再分享一個(gè)小技巧。每次我只跑基線版本的時(shí)候都會(huì)順手把整個(gè)配置文件、啟動(dòng)命令、commit 號(hào)記錄到一個(gè) markdown 文件里哪怕再忙也不省這一步。等一周后你發(fā)現(xiàn)效果不對(duì)想回退時(shí)這份記錄就是救命稻草。這比任何高級(jí)的技巧都實(shí)在。