練的兩階段:OLN提議網(wǎng)絡(luò)訓(xùn)練與Proposals提取完全指南)
揭秘UniDetector解耦訓(xùn)練的兩階段OLN提議網(wǎng)絡(luò)訓(xùn)練與Proposals提取完全指南【免費(fèi)下載鏈接】UniDetectorCode release for our CVPR 2023 paper Detecting Everything in the Open World: Towards Universal Object Detection.項(xiàng)目地址: https://gitcode.com/gh_mirrors/un/UniDetector如果你正在研究UniDetector 解耦訓(xùn)練decoupled training這篇指南將帶你完整拆解它最核心的兩個(gè)階段第一階段訓(xùn)練 OLN 區(qū)域提議Region Proposal網(wǎng)絡(luò)以及第二階段基于 CLIP 的 RoI 分類并手把手講清 Proposals 提取的每一步。UniDetector 是 CVPR 2023 論文《Detecting Everything in the Open World: Towards Universal Object Detection》的官方代碼目標(biāo)是訓(xùn)練一個(gè)能檢測開放世界中任何類別的通用目標(biāo)檢測器。一、為什么要用解耦訓(xùn)練傳統(tǒng) Faster R-CNN 把找框RPN和認(rèn)類RoI 分類捆在一起訓(xùn)練RPN 會受分類損失影響而過度擬合已知的 80/1200 個(gè)類別遇到新類別時(shí)就看不見了。UniDetector 的思路是把兩階段拆開、各自為戰(zhàn)階段模型學(xué)習(xí)目標(biāo)第一階段OLN-RPNOpen-World Localization Network只學(xué)哪里有物體完全不學(xué)分類中間步驟—用訓(xùn)好的 OLN 批量提取 Region Proposals 存成 pkl第二階段CLIP Backbone RoI 分類頭用 CLIP 圖文對齊能力給框打類別分下圖直觀展示了 UniDetector 的目標(biāo)用異構(gòu)標(biāo)注源不同標(biāo)簽空間聯(lián)合訓(xùn)練泛化到開放世界二、整體流程一圖看懂解耦訓(xùn)練共三步對應(yīng)configs/singledataset/下的配置文件訓(xùn)練 OLN 提議網(wǎng)絡(luò)→configs/singledataset/clip_decouple_faster_rcnn_r50_c4_1x_coco_1ststage.py提取 Proposalsdist_test.sh --out rp_train.pkl訓(xùn)練 RoI 分類→configs/singledataset/clip_decouple_faster_rcnn_r50_c4_1x_coco_2ndstage.py數(shù)據(jù)側(cè)的處理鏈路如下第二階段的 pipeline 會額外插入LoadProposals環(huán)節(jié)讀取提議框多數(shù)據(jù)集版本Objects365COCO、OpenImagesObjects365COCO流程完全一致直接換成 configs/multidataset/ 下的配置即可。三、第一階段訓(xùn)練 OLN 提議網(wǎng)絡(luò)只定位、不分類 核心思想Learning localization instead of classification at the proposal stage——提議階段只學(xué)定位從根源上避免 RPN 被分類帶偏。實(shí)現(xiàn)位于 oln_rpn_head.py相比標(biāo)準(zhǔn) RPN 有 4 個(gè)關(guān)鍵設(shè)計(jì)單 Anchor每個(gè)特征位置只用 1 個(gè) anchorscales[8], ratios[1.0]讓每個(gè) anchor 吃更多數(shù)據(jù)泛化更好TBLR 回歸用框中心到 GT 四條邊的距離TBLRBBoxCoder代替 xywh 回歸配 IoULossCenterness 分支額外預(yù)測框定得好不好的 objectness 分?jǐn)?shù)L1 損失推理時(shí)用它作為提議分?jǐn)?shù)排序關(guān)閉分類損失配置里loss_cls的loss_weight0.0模型完全不依賴類別標(biāo)簽數(shù)據(jù)集也設(shè)了class_agnosticTrue。訓(xùn)練命令8 卡COCO val35kbash tools/dist_train.sh configs/singledataset/clip_decouple_faster_rcnn_r50_c4_1x_coco_1ststage.py 8四、Proposals 提取把好框存成 pkl 文件訓(xùn)完 OLN 后用測試腳本對訓(xùn)練集和驗(yàn)證集分別跑一遍推理把每張圖 top-2000 的提議框保存下來bash tools/dist_test.sh configs/singledataset/clip_decouple_faster_rcnn_r50_c4_1x_coco_1ststage.py [path_for_trained_checkpoints] 8 --out rp_train.pkl幾個(gè)新手容易踩的坑文件命名有約定默認(rèn)叫rp_train.pkl/rp_val.pkl這個(gè)名字寫死在第二階段的配置里clip_decouple_faster_rcnn_r50_c4_1x_coco_2ndstage.py 的proposal_file字段。改了輸出名記得同步改配置或把 pkl 放到data_root對應(yīng)位置。測試時(shí)不做 NMS第一階段test_cfg里nms_thr0.0、max_num2000即每張圖輸出 2000 個(gè)帶 objectness 分?jǐn)?shù)、未去重的提議框見 oln_rpn_head.py。開放世界推理也要提取在 LVIS v0.5 上推理時(shí)用 clip_decouple_faster_rcnn_r50_c4_1x_lvis_v0.5_1ststage.py 提取rp_val_ow.pkl再喂給第二階段配置推理。提取出的 pkl 會在第二階段由LoadProposals讀入loading.py訓(xùn)練時(shí)每圖只取前 2000 個(gè)提議num_max_proposals2000。五、第二階段CLIP 驅(qū)動(dòng)的 RoI 分類第二階段是一個(gè)標(biāo)準(zhǔn)的 FastRCNN 結(jié)構(gòu)但換上了 CLIP 全家桶CLIPResNet 骨干clipresnet.pyCLIPResLayer共享頭需加載 RegionCLIP 預(yù)訓(xùn)練權(quán)重BBoxHeadCLIPbbox_head_clip.py把 RoI 特征與類別語言嵌入如clip_embeddings/coco_clip_acname_rn50_manyprompt.npy做余弦相似度得到類別分?jǐn)?shù)zeroshot_path指定嵌入文件路徑輸入框不再實(shí)時(shí)生成而是從proposal_file加載。訓(xùn)練命令注意load_from指向 RegionCLIP 權(quán)重bash tools/dist_train.sh configs/singledataset/clip_decouple_faster_rcnn_r50_c4_1x_coco_2ndstage.py 8 --cfg-options load_fromregionclip_pretrained-cc_rn50_mmdet.pth推理/評測時(shí)換成configs/inference/下對應(yīng)配置即可還可選用..._2ndstage_withcalibration.py開啟概率校準(zhǔn)提升開放世界分?jǐn)?shù)。六、配置文件速查表用途配置文件COCO 第一階段OLN 訓(xùn)練clip_decouple_faster_rcnn_r50_c4_1x_coco_1ststage.pyCOCO 第二階段RoI 分類clip_decouple_faster_rcnn_r50_c4_1x_coco_2ndstage.pyLVIS v0.5 開放世界推理1st/2ndclip_decouple_faster_rcnn_r50_c4_1x_lvis_v0.5_1ststage.py、clip_decouple_faster_rcnn_r50_c4_1x_lvis_v0.5_2ndstage.py多數(shù)據(jù)集訓(xùn)練Obj365COCO 等configs/multidataset/七、新手 FAQQ1第一階段為什么能不用類別標(biāo)簽因?yàn)?OLN 只優(yōu)化定位TBLR 回歸 Centerness配置中分類損失權(quán)重為 0數(shù)據(jù)集class_agnosticTrue所有 GT 框都被當(dāng)作同一個(gè)類處理所以模型天生對未知類別無偏。Q2rp_train.pkl 一定要叫這個(gè)名字嗎不一定要但第二階段配置里proposal_file默認(rèn)指向rp_train.pkl/rp_val.pkl改任一邊的命名即可兩者保持一致就行。Q3需要準(zhǔn)備哪些預(yù)訓(xùn)練資源區(qū)域 CLIP 圖像嵌入由 RegionCLIP 提供mmdetection 格式權(quán)重語言側(cè) CLIP 嵌入已預(yù)計(jì)算好放在 clip_embeddings/ 目錄也可用 dump_clip_features_manyprompt.py 自行生成。數(shù)據(jù)集準(zhǔn)備參考 docs/datasets.md。Q4想從零克隆項(xiàng)目開始git clone https://gitcode.com/gh_mirrors/un/UniDetector項(xiàng)目基于 mmdetection v2.18.0安裝環(huán)境請遵循 mmdetection 官方指南并額外安裝 CLIP 庫。? 掌握OLN 提議網(wǎng)絡(luò)訓(xùn)練 → Proposals 提取 → CLIP RoI 分類這條主線后你就可以直接改配置復(fù)現(xiàn) UniDetector 的開放世界檢測實(shí)驗(yàn)了【免費(fèi)下載鏈接】UniDetectorCode release for our CVPR 2023 paper Detecting Everything in the Open World: Towards Universal Object Detection.項(xiàng)目地址: https://gitcode.com/gh_mirrors/un/UniDetector創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考