版模型詳解:conv+ReLU 統(tǒng)一結(jié)構(gòu)與 PTQ 8位量化友好的工程設(shè)計(jì))
人工智能深度學(xué)習(xí)計(jì)算機(jī)視覺(jué)預(yù)訓(xùn)練模型量化【免費(fèi)下載鏈接】YOLOv6YOLOv6: a single-stage object detection framework dedicated to industrial applications.項(xiàng)目地址https://gitcode.com/gh_mirrors/yo/YOLOv6點(diǎn)擊查看免費(fèi)下載YOLOv6 基礎(chǔ)版base系列模型是官方針對(duì)快速迭代 8位量化部署場(chǎng)景給出的一整條產(chǎn)品線從 configs/base/README_cn.md 出發(fā)本文完整解讀其設(shè)計(jì)動(dòng)機(jī)、N/S/M/L 四個(gè)規(guī)格的網(wǎng)絡(luò)結(jié)構(gòu)與配置文件、量化友好的指標(biāo)表現(xiàn)并深入yolov6/models源碼印證conv_relu訓(xùn)練模式、CSP 半通道結(jié)構(gòu)等關(guān)鍵設(shè)計(jì)的落地方式幫助你在選型、訓(xùn)練與量化部署時(shí)做出有依據(jù)的決策。一、基礎(chǔ)版模型的定位與設(shè)計(jì)特點(diǎn)1.1 核心特點(diǎn)僅常規(guī)卷積 ReLU根據(jù) 基礎(chǔ)版模型說(shuō)明基礎(chǔ)版模型只有兩條硬性結(jié)構(gòu)約束僅使用常規(guī)卷積和 ReLU 激活函數(shù)網(wǎng)絡(luò)結(jié)構(gòu)均采用 CSP1/2 通道blockNano 網(wǎng)絡(luò)除外。僅使用常規(guī)卷積和 ReLU這一點(diǎn)在源碼中可以直接印證。所有 base 配置文件末尾都聲明了# configs/base/yolov6s_base.py其余 base 配置同樣如此 training_mode conv_relutraining_mode會(huì)被 yolov6/models/yolo.py 中的build_network讀取block get_block(config.training_mode)而 yolov6/layers/common.py#L721-L737 中的get_block定義了各模式到具體 block 的映射def get_block(mode): if mode repvgg: return RepVGGBlock elif mode qarepvgg: return QARepVGGBlock elif mode qarepvggv2: return QARepVGGBlockV2 elif mode hyper_search: return LinearAddBlock elif mode repopt: return RealVGGBlock elif mode conv_relu: return ConvBNReLU # 基礎(chǔ)版走這里普通 Conv BN ReLU elif mode conv_silu: return ConvBNSiLU else: raise NotImplementedError(Undefied Repblock choice for mode {}.format(mode))可以看到Y(jié)OLOv6 主線的repvgg模式使用結(jié)構(gòu)可重參數(shù)化的 RepVGGBlock訓(xùn)練態(tài)多分支、推理態(tài)融合而 base 系列的conv_relu模式直接使用最樸素的ConvBNReLU。這正是僅使用常規(guī)卷積和 ReLU的源碼依據(jù)——沒(méi)有重參數(shù)化分支、沒(méi)有 SiLU 這類非標(biāo)準(zhǔn)激活算子全部落在各類推理引擎的快速路徑上。1.2 為什么這樣設(shè)計(jì)PTQ 8位量化友好官方給出的優(yōu)勢(shì)表述是采用統(tǒng)一的網(wǎng)絡(luò)結(jié)構(gòu)和配置且 PTQ 8位量化模型精度損失較小適合剛?cè)腴T(mén)或有快速迭代部署 8位量化模型需求的用戶。其工程邏輯可以拆解為兩點(diǎn)算子簡(jiǎn)單 → 量化友好。常規(guī)卷積 ReLU 是主流推理引擎TensorRT 等中量化支持最成熟、校準(zhǔn)行為最穩(wěn)定的算子組合而重參數(shù)化多分支結(jié)構(gòu)、SiLU 等雖然 GPU 上高效但在 INT8 量化與跨硬件移植時(shí)的行為更難預(yù)測(cè)。結(jié)構(gòu)統(tǒng)一 → 流程可復(fù)用。N/S/M/L 四個(gè)規(guī)格共享同一套網(wǎng)絡(luò)骨架、同一套配置寫(xiě)法訓(xùn)練、評(píng)估、推理流程與主線 YOLOv6 完全一致用戶無(wú)需為base 版單獨(dú)學(xué)習(xí)一套流程。文檔同時(shí)給出了明確的取舍base 系列面向量化部署與快速迭代如果追求 GPU/高端硬件上的原始吞吐主線的 rep 結(jié)構(gòu)版本更合適。二、四個(gè)規(guī)格的網(wǎng)絡(luò)結(jié)構(gòu)與配置詳解base 系列配置集中在 configs/base/ 目錄包含 4 個(gè)從頭訓(xùn)練base配置與 4 個(gè)微調(diào)finetune配置configs/base/yolov6n_base.py、configs/base/yolov6s_base.py、configs/base/yolov6m_base.py、configs/base/yolov6l_base.py對(duì)應(yīng)微調(diào)版本yolov6n_base_finetune.py等2.1 規(guī)格縮放depth_multiple 與 width_multiple以 S 版配置 configs/base/yolov6s_base.py 為例完整配置如下其余規(guī)格僅縮放系數(shù)與骨干類型不同可對(duì)照閱讀# YOLOv6s small base model model dict( typeYOLOv6s_base, pretrainedNone, depth_multiple0.70, # 深度縮放系數(shù) width_multiple0.50, # 寬度通道縮放系數(shù) backbonedict( typeCSPBepBackbone, num_repeats[1, 6, 12, 18, 6], # 各 stage 基礎(chǔ)重復(fù)次數(shù) out_channels[64, 128, 256, 512, 1024], csp_efloat(1)/2, # CSP 半通道切分文檔中的CSP 1/2 通道 fuse_P2True, # 融合 P2 高分辨率特征 cspsppfTrue, # 使用 CSPPSF 替代 CSPP ), neckdict( typeCSPRepBiFPANNeck, # CSP 化 BiFPAN 頸部 num_repeats[12, 12, 12, 12], out_channels[256, 128, 128, 256, 256, 512], csp_efloat(1)/2, ), headdict( typeEffiDeHead, in_channels[128, 256, 512], num_layers3, begin_indices24, anchors3, anchors_init[[10,13, 19,19, 33,23], [30,61, 59,59, 59,119], [116,90, 185,185, 373,326]], out_indices[17, 20, 23], strides[8, 16, 32], atss_warmup_epoch0, iou_typegiou, use_dflTrue, # set to True if you want to further train with distillation reg_max16, # set to 16 if you want to further train with distillation distill_weight{ class: 1.0, dfl: 1.0, }, ) ) solver dict( optimSGD, lr_schedulerCosine, lr00.01, lrf0.01, momentum0.937, weight_decay0.0005, warmup_epochs3.0, warmup_momentum0.8, warmup_bias_lr0.1 ) data_aug dict( hsv_h0.015, hsv_s0.7, hsv_v0.4, degrees0.0, translate0.1, scale0.5, shear0.0, flipud0.0, fliplr0.5, mosaic1.0, mixup0.0, ) training_mode conv_relu縮放系數(shù)在 yolov6/models/yolo.py 的build_network中真正生效num_repeat [(max(round(i * depth_mul), 1) if i 1 else i) for i in (num_repeat_backbone num_repeat_neck)] channels_list [make_divisible(i * width_mul, 8) for i in (channels_list_backbone channels_list_neck)]即stage 重復(fù)次數(shù)按depth_multiple取整縮放最少保留 1 次通道數(shù)按width_multiple縮放并對(duì)齊到 8 的倍數(shù)。四個(gè)規(guī)格的縮放參數(shù)與骨干/頸部類型對(duì)照如下均可在對(duì)應(yīng)配置文件頭部直接核對(duì)模型type骨干backbone.type頸部neck.typedepth_multiplewidth_multipleYOLOv6-N-baseYOLOv6n_baseEfficientRepcspsppfTrueRepBiFPANNeck0.330.25YOLOv6-S-baseYOLOv6s_baseCSPBepBackbonecsp_e1/2, cspsppfTrueCSPRepBiFPANNeckcsp_e1/20.700.50YOLOv6-M-baseYOLOv6m_baseCSPBepBackbonecsp_e1/2CSPRepBiFPANNeckcsp_e1/20.800.75YOLOv6-L-baseYOLOv6l_baseCSPBepBackbonecsp_e1/2CSPRepBiFPANNeckcsp_e1/21.01.0對(duì)照說(shuō)明Nano 是文檔中除外的那個(gè)規(guī)格configs/base/yolov6n_base.py 使用EfficientRep骨干與RepBiFPANNeck頸部配置中沒(méi)有csp_e字段因此不使用 CSP 半通道結(jié)構(gòu)其余 S/M/L 三個(gè)規(guī)格統(tǒng)一使用帶csp_e0.5的CSPBepBackbone與CSPRepBiFPANNeck即文檔所稱CSP1/2 通道block。骨干CSPBepBackbone定義于 yolov6/models/efficientrep.py頸部CSPRepBiFPANNeck定義于 yolov6/models/reppan.py。四個(gè)規(guī)格的 head 均為EffiDeHead共享相同的anchors3、anchors_init、strides[8, 16, 32]與reg_max16這對(duì)應(yīng)統(tǒng)一網(wǎng)絡(luò)結(jié)構(gòu)和配置的說(shuō)法。2.2 蒸餾開(kāi)關(guān)use_dfl 與 reg_maxREADME 的指標(biāo)表中 mAP 均標(biāo)注了distill上標(biāo)這與 head 配置直接相關(guān)base 從頭訓(xùn)練配置默認(rèn)use_dflTrue, reg_max16表示以自蒸餾方式訓(xùn)練配置注釋寫(xiě)明 set to True if you want to further train with distillationdistill_weight控制類別分支與 DFL 分支的蒸餾權(quán)重四個(gè)規(guī)格分別為{class: 1.0}、{class: 1.0}、{class: 0.8}、{class: 2.0}dfl 均為 1.0。若不使用 DFL配置注釋也明確提示需將reg_max置 0。2.3 從頭訓(xùn)練與微調(diào)finetune配置差異*_finetune.py配置在模型結(jié)構(gòu)部分與對(duì)應(yīng) base 配置一致但針對(duì)下游數(shù)據(jù)集重新調(diào)優(yōu)了solver與data_aug。以 configs/base/yolov6s_base_finetune.py 與 configs/base/yolov6s_base.py 對(duì)比配置項(xiàng)base從頭訓(xùn)練finetune微調(diào)use_dfl/reg_maxTrue / 16False / 0lr0/lrf0.01 / 0.010.0032 / 0.12momentum0.9370.843weight_decay0.00050.00036warmup_epochs3.02.0scale/mixup0.5 / 0.00.898 / 0.243即微調(diào)版本關(guān)閉了 DFLuse_dflFalse, reg_max0改用更低的初始學(xué)習(xí)率與更強(qiáng)的數(shù)據(jù)增廣組合適合加載官方預(yù)訓(xùn)練權(quán)重后在自定義數(shù)據(jù)集上快速收斂。三、模型指標(biāo)COCO val以下為 configs/base/README_cn.md 給出的完整指標(biāo)表所有模型輸入尺寸 640速度測(cè)試于 T4TensorRT 版本 8.4.2.4模型尺寸mAPval 0.5:0.95速度T4 TRT FP16 b1 (FPS)速度T4 TRT FP16 b32 (FPS)速度T4 TRT INT8 b1 (FPS)速度T4 TRT INT8 b32 (FPS)Params (M)FLOPs (G)YOLOv6-N-base64036.6distill727130281418054.6511.46YOLOv6-S-base64045.3distill34652548790813.1430.6YOLOv6-M-base64049.4distill17924528443928.3372.30YOLOv6-L-base64051.1distill11615719628859.61150.89從表中可以讀到兩條選型信息INT8 相對(duì) FP16 的收益以 S-base 為例b1 下 487 vs 346 FPS、b32 下 908 vs 525 FPS量化后吞吐提升明顯而 mAP 口徑標(biāo)注為 distill 后的 FP16 精度——這與PTQ 8位量化精度損失較小的結(jié)論相互呼應(yīng)batch 維度的加速比N-base 在 b1→b32 下 FP16 吞吐約為 1.8 倍說(shuō)明小模型在單流b1低延遲場(chǎng)景同樣有競(jìng)爭(zhēng)力727 FPS b1。四、訓(xùn)練、評(píng)估與推理流程文檔明確說(shuō)明base 系列的訓(xùn)練、評(píng)估、推理流程與主線 YOLOv6 完全一致即直接復(fù)用 tools/train.py、tools/eval.py、tools/infer.py 入口。參考 首頁(yè) README 快速開(kāi)始典型的訓(xùn)練命令形式為# 單卡 python tools/train.py --batch 64 --conf configs/base/yolov6s_base.py --data data/coco.yaml --device 0 # 多卡torch.distributed 啟動(dòng)方式 python -m torch.distributed.launch --nproc_per_node 8 tools/train.py \ --batch 256 --conf configs/base/yolov6s_base.py --data data/coco.yaml --device 0,1,2,3,4,5,6,7使用要點(diǎn)--conf指向 configs/base/ 下的目標(biāo)配置在自定義數(shù)據(jù)集上訓(xùn)練時(shí)建議改用對(duì)應(yīng)的*_finetune.py配置微調(diào)版data_aug/solver已針對(duì)下游任務(wù)調(diào)優(yōu)--data指定數(shù)據(jù)集描述文件倉(cāng)庫(kù)自帶 data/coco.yaml、data/voc.yaml、data/dataset.yaml 可參考自定義數(shù)據(jù)集組織方式見(jiàn) docs/Train_custom_data.md 與 docs/Train_coco_data.md訓(xùn)練中斷后可用同一命令--resume或指定 checkpoint 路徑恢復(fù)訓(xùn)練細(xì)節(jié)見(jiàn) README_cn.md 的恢復(fù)訓(xùn)練一節(jié)評(píng)估與推理分別使用tools/eval.py與tools/infer.py命令格式與主線模型一致不需要為 base 系列做額外適配。五、小結(jié)base 系列通過(guò)training_mode conv_relu把網(wǎng)絡(luò)約束到常規(guī)卷積 ReLU見(jiàn) yolov6/layers/common.py#L721-L737 的get_blockS/M/L 規(guī)格再疊加csp_e0.5的 CSP 半通道結(jié)構(gòu)yolov6/models/efficientrep.py、yolov6/models/reppan.py換取 PTQ 8位量化下更小的精度損失N/S/M/L 四規(guī)格僅通過(guò)depth_multiple/width_multiple與 backbone/neck 類型區(qū)分N 為唯一非 CSP 規(guī)格head、anchor、stride 配置完全統(tǒng)一訓(xùn)練/評(píng)估/推理流程與主線一致選型上追求 8位量化部署與快速迭代選 base 系列配合*_finetune.py在自有數(shù)據(jù)集上微調(diào)若關(guān)注 GPU 原始吞吐可對(duì)照主線 rep 系列與 configs/repopt/、configs/yolov6_lite/ 等其他變體。贊分享人工智能深度學(xué)習(xí)計(jì)算機(jī)視覺(jué)預(yù)訓(xùn)練模型量化【免費(fèi)下載鏈接】YOLOv6YOLOv6: a single-stage object detection framework dedicated to industrial applications.項(xiàng)目地址https://gitcode.com/gh_mirrors/yo/YOLOv6點(diǎn)擊查看免費(fèi)下載相關(guān)推薦YOLOv6 基礎(chǔ)版模型詳解base 系列配置體系、結(jié)構(gòu)設(shè)計(jì)與量化友好的實(shí)踐指南YOLOv6 基礎(chǔ)版模型詳解base 系列配置體系、結(jié)構(gòu)設(shè)計(jì)與量化友好的實(shí)踐指南 本篇技術(shù)指南基于 YOLOv6 倉(cāng)庫(kù)中 configs/base/ 目錄的官人工智能深度學(xué)習(xí)計(jì)算機(jī)視覺(jué)預(yù)訓(xùn)練模型量化YOLOv6 RepOpt版本實(shí)現(xiàn)詳解更高效的訓(xùn)練與量化友好架構(gòu)YOLOv6 RepOpt版本實(shí)現(xiàn)詳解更高效的訓(xùn)練與量化友好架構(gòu) 引言 在目標(biāo)檢測(cè)領(lǐng)域YOLO系列算法一直以其優(yōu)異的性能和實(shí)時(shí)性著稱。YOLOv6作為該系列人工智能深度學(xué)習(xí)計(jì)算機(jī)視覺(jué)預(yù)訓(xùn)練模型量化CodeGuide 仿微信 IM 系統(tǒng)基于 NettyJavaFx 的好友搜索、添加好友與雙向好友關(guān)系設(shè)計(jì)CodeGuide 仿微信 IM 系統(tǒng)基于 NettyJavaFx 的好友搜索、添加好友與雙向好友關(guān)系設(shè)計(jì) 本文基于 CodeGuide《NettyJav文檔教程后端上一篇MBox插件化架構(gòu)解析如何擴(kuò)展自定義移動(dòng)研發(fā)工具鏈下一篇ZXing終極自動(dòng)化測(cè)試指南Firebase Test Lab實(shí)戰(zhàn)解析創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考