ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

YOLOv6 基础版模型详解:conv+ReLU 统一结构与 PTQ 8位量化友好的工程设计

YOLOv6 基础版模型详解:conv+ReLU 统一结构与 PTQ 8位量化友好的工程设计 人工智能深度学习计算机视觉预训练模型量化【免费下载链接】YOLOv6YOLOv6: a single-stage object detection framework dedicated to industrial applications.项目地址https://gitcode.com/gh_mirrors/yo/YOLOv6点击查看免费下载YOLOv6 基础版base系列模型是官方针对快速迭代 8位量化部署场景给出的一整条产品线从 configs/base/README_cn.md 出发本文完整解读其设计动机、N/S/M/L 四个规格的网络结构与配置文件、量化友好的指标表现并深入yolov6/models源码印证conv_relu训练模式、CSP 半通道结构等关键设计的落地方式帮助你在选型、训练与量化部署时做出有依据的决策。一、基础版模型的定位与设计特点1.1 核心特点仅常规卷积 ReLU根据 基础版模型说明基础版模型只有两条硬性结构约束仅使用常规卷积和 ReLU 激活函数网络结构均采用 CSP1/2 通道blockNano 网络除外。仅使用常规卷积和 ReLU这一点在源码中可以直接印证。所有 base 配置文件末尾都声明了# configs/base/yolov6s_base.py其余 base 配置同样如此 training_mode conv_relutraining_mode会被 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 # 基础版走这里普通 Conv BN ReLU elif mode conv_silu: return ConvBNSiLU else: raise NotImplementedError(Undefied Repblock choice for mode {}.format(mode))可以看到YOLOv6 主线的repvgg模式使用结构可重参数化的 RepVGGBlock训练态多分支、推理态融合而 base 系列的conv_relu模式直接使用最朴素的ConvBNReLU。这正是仅使用常规卷积和 ReLU的源码依据——没有重参数化分支、没有 SiLU 这类非标准激活算子全部落在各类推理引擎的快速路径上。1.2 为什么这样设计PTQ 8位量化友好官方给出的优势表述是采用统一的网络结构和配置且 PTQ 8位量化模型精度损失较小适合刚入门或有快速迭代部署 8位量化模型需求的用户。其工程逻辑可以拆解为两点算子简单 → 量化友好。常规卷积 ReLU 是主流推理引擎TensorRT 等中量化支持最成熟、校准行为最稳定的算子组合而重参数化多分支结构、SiLU 等虽然 GPU 上高效但在 INT8 量化与跨硬件移植时的行为更难预测。结构统一 → 流程可复用。N/S/M/L 四个规格共享同一套网络骨架、同一套配置写法训练、评估、推理流程与主线 YOLOv6 完全一致用户无需为base 版单独学习一套流程。文档同时给出了明确的取舍base 系列面向量化部署与快速迭代如果追求 GPU/高端硬件上的原始吞吐主线的 rep 结构版本更合适。二、四个规格的网络结构与配置详解base 系列配置集中在 configs/base/ 目录包含 4 个从头训练base配置与 4 个微调finetune配置configs/base/yolov6n_base.py、configs/base/yolov6s_base.py、configs/base/yolov6m_base.py、configs/base/yolov6l_base.py对应微调版本yolov6n_base_finetune.py等2.1 规格缩放depth_multiple 与 width_multiple以 S 版配置 configs/base/yolov6s_base.py 为例完整配置如下其余规格仅缩放系数与骨干类型不同可对照阅读# YOLOv6s small base model model dict( typeYOLOv6s_base, pretrainedNone, depth_multiple0.70, # 深度缩放系数 width_multiple0.50, # 宽度通道缩放系数 backbonedict( typeCSPBepBackbone, num_repeats[1, 6, 12, 18, 6], # 各 stage 基础重复次数 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缩放系数在 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 重复次数按depth_multiple取整缩放最少保留 1 次通道数按width_multiple缩放并对齐到 8 的倍数。四个规格的缩放参数与骨干/颈部类型对照如下均可在对应配置文件头部直接核对模型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对照说明Nano 是文档中除外的那个规格configs/base/yolov6n_base.py 使用EfficientRep骨干与RepBiFPANNeck颈部配置中没有csp_e字段因此不使用 CSP 半通道结构其余 S/M/L 三个规格统一使用带csp_e0.5的CSPBepBackbone与CSPRepBiFPANNeck即文档所称CSP1/2 通道block。骨干CSPBepBackbone定义于 yolov6/models/efficientrep.py颈部CSPRepBiFPANNeck定义于 yolov6/models/reppan.py。四个规格的 head 均为EffiDeHead共享相同的anchors3、anchors_init、strides[8, 16, 32]与reg_max16这对应统一网络结构和配置的说法。2.2 蒸馏开关use_dfl 与 reg_maxREADME 的指标表中 mAP 均标注了distill上标这与 head 配置直接相关base 从头训练配置默认use_dflTrue, reg_max16表示以自蒸馏方式训练配置注释写明 set to True if you want to further train with distillationdistill_weight控制类别分支与 DFL 分支的蒸馏权重四个规格分别为{class: 1.0}、{class: 1.0}、{class: 0.8}、{class: 2.0}dfl 均为 1.0。若不使用 DFL配置注释也明确提示需将reg_max置 0。2.3 从头训练与微调finetune配置差异*_finetune.py配置在模型结构部分与对应 base 配置一致但针对下游数据集重新调优了solver与data_aug。以 configs/base/yolov6s_base_finetune.py 与 configs/base/yolov6s_base.py 对比配置项base从头训练finetune微调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即微调版本关闭了 DFLuse_dflFalse, reg_max0改用更低的初始学习率与更强的数据增广组合适合加载官方预训练权重后在自定义数据集上快速收敛。三、模型指标COCO val以下为 configs/base/README_cn.md 给出的完整指标表所有模型输入尺寸 640速度测试于 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 相对 FP16 的收益以 S-base 为例b1 下 487 vs 346 FPS、b32 下 908 vs 525 FPS量化后吞吐提升明显而 mAP 口径标注为 distill 后的 FP16 精度——这与PTQ 8位量化精度损失较小的结论相互呼应batch 维度的加速比N-base 在 b1→b32 下 FP16 吞吐约为 1.8 倍说明小模型在单流b1低延迟场景同样有竞争力727 FPS b1。四、训练、评估与推理流程文档明确说明base 系列的训练、评估、推理流程与主线 YOLOv6 完全一致即直接复用 tools/train.py、tools/eval.py、tools/infer.py 入口。参考 首页 README 快速开始典型的训练命令形式为# 单卡 python tools/train.py --batch 64 --conf configs/base/yolov6s_base.py --data data/coco.yaml --device 0 # 多卡torch.distributed 启动方式 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使用要点--conf指向 configs/base/ 下的目标配置在自定义数据集上训练时建议改用对应的*_finetune.py配置微调版data_aug/solver已针对下游任务调优--data指定数据集描述文件仓库自带 data/coco.yaml、data/voc.yaml、data/dataset.yaml 可参考自定义数据集组织方式见 docs/Train_custom_data.md 与 docs/Train_coco_data.md训练中断后可用同一命令--resume或指定 checkpoint 路径恢复训练细节见 README_cn.md 的恢复训练一节评估与推理分别使用tools/eval.py与tools/infer.py命令格式与主线模型一致不需要为 base 系列做额外适配。五、小结base 系列通过training_mode conv_relu把网络约束到常规卷积 ReLU见 yolov6/layers/common.py#L721-L737 的get_blockS/M/L 规格再叠加csp_e0.5的 CSP 半通道结构yolov6/models/efficientrep.py、yolov6/models/reppan.py换取 PTQ 8位量化下更小的精度损失N/S/M/L 四规格仅通过depth_multiple/width_multiple与 backbone/neck 类型区分N 为唯一非 CSP 规格head、anchor、stride 配置完全统一训练/评估/推理流程与主线一致选型上追求 8位量化部署与快速迭代选 base 系列配合*_finetune.py在自有数据集上微调若关注 GPU 原始吞吐可对照主线 rep 系列与 configs/repopt/、configs/yolov6_lite/ 等其他变体。赞分享人工智能深度学习计算机视觉预训练模型量化【免费下载链接】YOLOv6YOLOv6: a single-stage object detection framework dedicated to industrial applications.项目地址https://gitcode.com/gh_mirrors/yo/YOLOv6点击查看免费下载相关推荐YOLOv6 基础版模型详解base 系列配置体系、结构设计与量化友好的实践指南YOLOv6 基础版模型详解base 系列配置体系、结构设计与量化友好的实践指南 本篇技术指南基于 YOLOv6 仓库中 configs/base/ 目录的官人工智能深度学习计算机视觉预训练模型量化YOLOv6 RepOpt版本实现详解更高效的训练与量化友好架构YOLOv6 RepOpt版本实现详解更高效的训练与量化友好架构 引言 在目标检测领域YOLO系列算法一直以其优异的性能和实时性著称。YOLOv6作为该系列人工智能深度学习计算机视觉预训练模型量化CodeGuide 仿微信 IM 系统基于 NettyJavaFx 的好友搜索、添加好友与双向好友关系设计CodeGuide 仿微信 IM 系统基于 NettyJavaFx 的好友搜索、添加好友与双向好友关系设计 本文基于 CodeGuide《NettyJav文档教程后端上一篇MBox插件化架构解析如何扩展自定义移动研发工具链下一篇ZXing终极自动化测试指南Firebase Test Lab实战解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表