練指南:從 COCO 數(shù)據(jù)集到 8 卡分布式訓(xùn)練一條龍)
DynamicHead 完整訓(xùn)練指南從 COCO 數(shù)據(jù)集到 8 卡分布式訓(xùn)練一條龍【免費(fèi)下載鏈接】DynamicHead項(xiàng)目地址: https://gitcode.com/gh_mirrors/dy/DynamicHeadDynamicHead 是 CVPR 2021 論文《Dynamic Head: Unifying Object Detection Heads with Attentions》的官方開(kāi)源實(shí)現(xiàn)通過(guò)尺度感知、空間感知與任務(wù)感知三重自注意力機(jī)制在不增加計(jì)算開(kāi)銷(xiāo)的前提下顯著提升目標(biāo)檢測(cè)精度。本文面向新手帶你走完 DynamicHead 訓(xùn)練的完整流程從環(huán)境搭建、COCO 數(shù)據(jù)集準(zhǔn)備到配置文件解析再到 8 卡分布式訓(xùn)練與模型評(píng)估一條龍搞定目標(biāo)檢測(cè)訓(xùn)練。一、DynamicHead 是什么為什么值得訓(xùn)練 傳統(tǒng)檢測(cè)器Faster R-CNN、RetinaNet、ATSS的檢測(cè)頭只是簡(jiǎn)單堆疊卷積層表達(dá)能力有限。DynamicHead 的核心思路是用注意力機(jī)制統(tǒng)一檢測(cè)頭注意力類(lèi)型作用維度解決的問(wèn)題尺度感知scale-aware特征金字塔層間不同尺度目標(biāo)的響應(yīng)沖突空間感知spatial-aware空間位置相似外觀的混淆目標(biāo)任務(wù)感知task-aware輸出通道分類(lèi)與回歸任務(wù)的目標(biāo)沖突三者組合后檢測(cè)頭表達(dá)能力大幅提升且推理階段幾乎不增加額外計(jì)算量屬于典型的高性?xún)r(jià)比改進(jìn)非常適合作為目標(biāo)檢測(cè)訓(xùn)練入門(mén)與進(jìn)階的實(shí)戰(zhàn)項(xiàng)目。項(xiàng)目核心代碼結(jié)構(gòu)非常清晰新手可以從這幾個(gè)文件入手閱讀檢測(cè)頭主實(shí)現(xiàn)dyhead/dyhead.py內(nèi)含 DyConv 動(dòng)態(tài)卷積與注意力模塊可變形卷積支持dyhead/deform.py動(dòng)態(tài)激活函數(shù) DYReLUdyhead/dyrelu.py檢測(cè)頭配置項(xiàng)定義dyhead/config.py附加骨干與檢測(cè)器模塊extra/包含 ATSS、ResNet、Swin-Transformer、Sigmoid Focal Loss二、訓(xùn)練前的環(huán)境準(zhǔn)備最快配置方法??DynamicHead 基于 Detectron2 實(shí)現(xiàn)依賴(lài)項(xiàng)非常簡(jiǎn)單Python 3.7 與 PyTorch含 CUDA 支持torchvisionDetectron2timmSwin-Transformer 骨干需要環(huán)境安裝三步走# 1. 安裝 PyTorch按官方指引選擇對(duì)應(yīng) CUDA 版本 conda install pytorch torchvision cudatoolkit -c pytorch # 2. 安裝 Detectron2從源碼編譯需要 GCC 與 CUDA Toolkit python -m pip install githttps://github.com/facebookresearch/detectron2.git # 3. 安裝 timm python -m pip install timm編譯 Detectron2 需要 NVIDIA 驅(qū)動(dòng)與 CUDA Toolkit 就緒可用nvidia-smi驗(yàn)證。若編譯遇到網(wǎng)絡(luò)問(wèn)題可嘗試先安裝好 torch 與 torchvision 再重試。三、獲取 DynamicHead 代碼并一鍵安裝 克隆官方倉(cāng)庫(kù)并安裝命令非常簡(jiǎn)單git clone https://gitcode.com/gh_mirrors/dy/DynamicHead cd DynamicHead python -m pip install -e DynamicHead-e以可編輯模式安裝源碼改動(dòng)即時(shí)生效方便閱讀與二次開(kāi)發(fā)。安裝過(guò)程中 setup.py 會(huì)自動(dòng)編譯 CUDA 擴(kuò)展包括可變形卷積與 Sigmoid Focal Loss 的算子核心源碼位于 dyhead/csrc/其中 CUDA 算子包括deform_conv_kernel_cuda.cu可變形卷積核心SigmoidFocalLoss_cuda.cuFocal Loss 加速四、COCO 數(shù)據(jù)集準(zhǔn)備最容易踩坑的一步?項(xiàng)目使用 Detectron2 的數(shù)據(jù)集規(guī)范訓(xùn)練集為coco_2017_train驗(yàn)證集為coco_2017_val。你需要下載 COCO 2017 數(shù)據(jù)集train2017 圖片 val2017 圖片 annotations 標(biāo)注按 Detectron2 要求的目錄結(jié)構(gòu)擺放$DETECTRON2_DATASETS/ coco/ annotations/ instances_train2017.json instances_val2017.json train2017/ val2017/通過(guò)環(huán)境變量DETECTRON2_DATASETS指定數(shù)據(jù)集根目錄 提示如果不想下載完整 COCO也可以先用小規(guī)模數(shù)據(jù)如自定義數(shù)據(jù)集按 COCO 格式整理驗(yàn)證訓(xùn)練流程跑通再切換回完整數(shù)據(jù)集。五、四大訓(xùn)練配置解讀Model Zoo 精講項(xiàng)目在 configs/ 目錄下提供了 4 套現(xiàn)成配置覆蓋從入門(mén)到進(jìn)階配置文件檢測(cè)器 骨干調(diào)度器COCO mAPdyhead_r50_rcnn_fpn_1x.yamlFaster R-CNN DyHead R501x40.3dyhead_r50_retina_fpn_1x.yamlRetinaNet DyHead R501x39.9dyhead_r50_atss_fpn_1x.yamlATSS DyHead R501x42.4dyhead_swint_atss_fpn_2x_ms.yamlATSS DyHead Swin-Tiny2x 多尺度49.8新手推薦從dyhead_r50_atss_fpn_1x.yaml入手ATSS DyHead 組合在 R50 骨干下 mAP 最高42.4且訓(xùn)練成本適中。進(jìn)階選擇dyhead_swint_atss_fpn_2x_ms.yaml使用 Swin-Tiny 骨干 多尺度訓(xùn)練MIN_SIZE_TRAIN: (640, ..., 800)配合 AdamW 優(yōu)化器與BASE_LR: 0.0001精度可達(dá) 49.8 mAP但顯存與訓(xùn)練時(shí)間成倍增加。以 dyhead_r50_retina_fpn_1x.yaml 為例核心配置項(xiàng)解讀MODEL: META_ARCHITECTURE: RetinaNet # 檢測(cè)器框架 DYHEAD: NUM_CONVS: 6 # 檢測(cè)頭卷積層數(shù) CHANNELS: 256 # 檢測(cè)頭通道數(shù) SOLVER: IMS_PER_BATCH: 16 # 總批大小8卡時(shí)每卡2張 BASE_LR: 0.01 # 基礎(chǔ)學(xué)習(xí)率 STEPS: (60000, 80000) # 學(xué)習(xí)率衰減節(jié)點(diǎn) MAX_ITER: 90000 # 總迭代次數(shù)檢測(cè)頭相關(guān)的NUM_CONVS與CHANNELS定義在 dyhead/config.py修改后即可定制檢測(cè)頭容量。六、8 卡分布式訓(xùn)練實(shí)戰(zhàn)一條命令啟動(dòng)DynamicHead 的訓(xùn)練腳本 train_net.py 基于 Detectron2 的launch封裝支持多卡多機(jī)。單節(jié)點(diǎn) 8 卡訓(xùn)練只需一條命令DETECTRON2_DATASETS$DATASET python train_net.py \ --config configs/dyhead_r50_atss_fpn_1x.yaml \ --num-gpus 8其中$DATASET替換為你的數(shù)據(jù)集根目錄。腳本內(nèi)部會(huì)通過(guò)DistributedDataParallel自動(dòng)完成多卡并行見(jiàn) train_net.py 中find_unused_parametersTrue的 DDP 封裝并自動(dòng)適配學(xué)習(xí)率。多機(jī)訓(xùn)練只需追加--num-machines N --machine-rank R --dist-url tcp://主節(jié)點(diǎn)IP:端口腳本已兼容 Azure Batch AI 環(huán)境變量。七、斷點(diǎn)續(xù)訓(xùn)與單卡訓(xùn)練小貼士 ?斷點(diǎn)續(xù)訓(xùn)訓(xùn)練中斷后直接重跑同一命令即可train_net.py 中的resume_or_load(resumeTrue)會(huì)自動(dòng)加載最近 checkpoint 并從斷點(diǎn)繼續(xù)單卡訓(xùn)練將--num-gpus改為 1同時(shí)需手動(dòng)降低BASE_LRDetectron2 按線(xiàn)性縮放規(guī)則1 卡建議約為 8 卡時(shí)的 1/8否則容易發(fā)散顯存不足可調(diào)低SOLVER.IMS_PER_BATCH或DYHEAD.NUM_CONVS或改用 R50 而非 Swin-Tiny 配置八、模型測(cè)試與評(píng)估驗(yàn)證訓(xùn)練成果訓(xùn)練完成后用--eval-only配合權(quán)重文件即可在 COCO val 上評(píng)估DETECTRON2_DATASETS$DATASET python train_net.py \ --config configs/dyhead_r50_atss_fpn_1x.yaml \ --num-gpus 8 \ --eval-only MODEL.WEIGHTS /path/to/model_final.pth腳本通過(guò) train_net.py 中的COCOEvaluator輸出標(biāo)準(zhǔn) COCO 指標(biāo)AP、AP50、AP75 等與官方 Model Zoo 的 42.4 mAP 對(duì)照即可驗(yàn)證訓(xùn)練正確性。評(píng)估日志與可視化結(jié)果會(huì)輸出到OUTPUT_DIR/inference/目錄。九、常見(jiàn)問(wèn)題速查FAQ?問(wèn)題解決辦法CUDA 算子編譯失敗確認(rèn) PyTorch 與 CUDA Toolkit 版本匹配升級(jí) GCC 后重裝找不到 COCO 數(shù)據(jù)集檢查DETECTRON2_DATASETS目錄結(jié)構(gòu)是否符合第二節(jié)規(guī)范多卡訓(xùn)練 OOM降低IMS_PER_BATCH或改用 R50 配置也可開(kāi)啟梯度累積精度與論文有差距確認(rèn)使用 ImageNet 預(yù)訓(xùn)練權(quán)重配置中MODEL.WEIGHTS并檢查批大小與學(xué)習(xí)率是否匹配寫(xiě)在最后從環(huán)境搭建、COCO 數(shù)據(jù)集準(zhǔn)備到配置文件解讀再到 8 卡分布式訓(xùn)練與評(píng)估DynamicHead 的完整訓(xùn)練鏈路已經(jīng)全部打通。作為 CVPR 2021 的高性?xún)r(jià)比目標(biāo)檢測(cè)方案它既是理解注意力機(jī)制如何改造檢測(cè)頭的絕佳教材也是快速產(chǎn)出高精度檢測(cè)模型的實(shí)用工具??烊タ寺}(cāng)庫(kù)跑起你的第一輪訓(xùn)練吧【免費(fèi)下載鏈接】DynamicHead項(xiàng)目地址: https://gitcode.com/gh_mirrors/dy/DynamicHead創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考