百面算法工程师 | YOLOv6面试考点原理全解析

本文给大家带来的百面算法工程师是深度学习目标检测YOLOv6面试总结,文章内总结了常见的提问问题,旨在为广大学子模拟出更贴合实际的面试问答场景。在这篇文章中,我们还将介绍一些常见的深度学习目标检测面试问题,并提供参考的回答及其理论基础,以帮助求职者更好地准备面试。通过对这些问题的理解和回答,求职者可以展现出自己的深度学习目标检测领域的专业知识解决问题的能力以及对实际应用场景的理解。同时,这也是为了帮助求职者更好地应对深度学习目标检测岗位的面试挑战,提升面试的成功率和竞争力

专栏地址:百面算法工程师——总结最新各种计算机视觉的相关算法面试问题


YOLOv6论文地址 :点击即可跳转

YOLOv6 官方开源库地址: 官方代码仓库点击即可跳转


目录

1. 数据增强模块

2. 网络结构

2.1 Backbone

​2.2 Neck

2.3 Head

3. 正负样本匹配策略

3.1 Anchor 设置

3.2 Bbox 编解码过程

3.3 匹配策略

4. Loss 设计

4.1 分类损失函数 VarifocalLoss

4.2 回归损失函数 GIoU Loss / SIoU Los


 文章中部分内容已在YOLOv5中讲过,此处不再赘述,感兴趣的同学可以阅读

百面算法工程师 | YOLOv5面试考点原理全解析_yolov5面试详解-CSDN博客

YOLOv6 提出了一系列适用于各种工业场景的模型,包括 N/T/S/M/L,考虑到模型的大小,其架构有所不同,以获得更好的精度-速度权衡。本算法专注于检测的精度和推理效率,并在网络结构、训练策略等算法层面进行了多项改进和优化。

简单来说 YOLOv6 开源库的主要特点为:

  1. 统一设计了更高效的 Backbone 和 Neck:受到硬件感知神经网络设计思想的启发,基于 RepVGG style 设计了可重参数化、更高效的骨干网络 EfficientRep Backbone 和 Rep-PAN Neck。
  2. 相比于 YOLOX 的 Decoupled Head,进一步优化设计了简洁有效的 Efficient Decoupled Head,在维持精度的同时,降低了一般解耦头带来的额外延时开销。
  3. 在训练策略上,采用 Anchor-free 的策略,同时辅以 SimOTA 标签分配策略以及 SIoU 边界框回归损失来进一步提高检测精度。

YOLOv6 和 YOLOv5 一样也可以分成数据增强、模型结构、loss 计算等组件,如下所示:

1. 数据增强模块

YOLOv6 目标检测算法中使用的数据增强与 YOLOv5 基本一致,唯独不一样的是没有使用 Albu 的数据增强方式:

  • Mosaic 马赛克
  • RandomAffine 随机仿射变换
  • MixUp
  • 图像模糊等采用 Albu 库实现的变换
  • HSV 颜色空间增强
  • 随机水平翻转

关于每一个增强的详细解释,详情请看YOLOv5 数据增强模块

百面算法工程师 | YOLOv5面试考点原理全解析_yolov5面试详解-CSDN博客

另外,YOLOv6 参考了 YOLOX 的数据增强方式,分为 2 种增强方法组,一开始和 YOLOv5 一致,但是在最后 15 个 epoch 的时候将 Mosaic 使用 YOLOv5KeepRatioResize + LetterResize 替代了,个人感觉是为了拟合真实情况。

2. 网络结构

YOLOv6 N/T/S 模型的网络结构由 EfficientRep + Rep-PAN + Efficient decoupled Head 构成,M/L 模型的网络结构则由 CSPBep + CSPRepPAFPN + Efficient decoupled Head 构成。其中,Backbone 和 Neck 部分的结构与 YOLOv5 较为相似,但不同的是其采用了重参数化结构 RepVGG Block 替换掉了原本的 ConvModule,在此基础上,将 CSPLayer 改进为了多个 RepVGG 堆叠的 RepStageBlock(N/T/S 模型)或 BepC3StageBlock(M/L 模型);Head 部分则参考了 FCOS 和 YOLOX 的检测头,将回归与分类分支解耦成两个分支进行预测。

2.1 Backbone

已有研究表明,多分支的网络结构通常比单分支网络性能更加优异,例如 YOLOv5 的 CSPDarknet,但是这种结构会导致并行度降低进而增加推理延时;相反,类似于 VGG 的单分支网络则具有并行度高、内存占用小的优点,因此推理效率更高。而 RepVGG 则同时具备上述两种结构的优点,在训练时可解耦成多分支拓扑结构提升模型精度,实际部署时可等效融合为单个 3×3 卷积提升推理速度,RepVGG 示意图如下。因此,YOLOv6 基于 RepVGG 重参数化结构设计了高效的骨干网络 EfficientRep 和 CSPBep,其可以充分利用硬件算力,提升模型表征能力的同时降低推理延时。

​在 N/T/S 模型中,YOLOv6 使用了 EfficientRep 作为骨干网络,其包含 1 个 Stem Layer 和 4 个 Stage Layer,具体细节如下:

  • Stem Layer 中采用 stride=2 的 RepVGGBlock 替换了 stride=2 的 6×6 ConvModule。
  • Stage Layer 结构与 YOLOv5 基本相似,将每个 Stage layer 的 1 个 ConvModule 和 1 个 CSPLayer 分别替换为 1 个 RepVGGBlock 和 1 个 RepStageBlock,如上图 Details 部分所示。其中,第一个 RepVGGBlock 会做下采样和 Channel 维度变换,而每个 RepStageBlock 则由 n 个 RepVGGBlock 组成。此外,仍然在第 4 个 Stage Layer 最后增加 SPPF 模块后输出。

在 M/L 模型中,由于模型容量进一步增大,直接使用多个 RepVGGBlock 堆叠的 RepStageBlock 结构计算量和参数量呈现指数增长。因此,为了权衡计算负担和模型精度,在 M/L 模型中使用了 CSPBep 骨干网络,其采用 BepC3StageBlock 替换了小模型中的 RepStageBlock 。如下图所示,BepC3StageBlock 由 3 个 1×1 的 ConvModule 和多个子块(每个子块由两个 RepVGGBlock 残差连接)组成。

​2.2 Neck

Neck 部分结构仍然在 YOLOv5 基础上进行了模块的改动,同样采用 RepStageBlock 或 BepC3StageBlock 对原本的 CSPLayer 进行了替换,需要注意的是,Neck 中 Down Sample 部分仍然使用了 stride=2 的 3×3 ConvModule,而不是像 Backbone 一样替换为 RepVGGBlock。

2.3 Head

不同于传统的 YOLO 系列检测头,YOLOv6 参考了 FCOS 和 YOLOX 中的做法,将分类和回归分支解耦成两个分支进行预测并且去掉了 obj 分支。同时,采用了 hybrid-channel 策略构建了更高效的解耦检测头,将中间 3×3 的 ConvModule 减少为 1 个,在维持精度的同时进一步减少了模型耗费,降低了推理延时。此外,需要说明的是,YOLOv6 在 Backobone 和 Neck 部分使用的激活函数是 ReLU,而在 Head 部分则使用的是 SiLU。

由于 YOLOv6 是解耦输出,分类和 bbox 检测通过不同卷积完成。以 COCO 80 类为例:

  • P5 模型在输入为 640x640 分辨率情况下,其 Head 模块输出的 shape 分别为 (B,4,80,80), (B,80,80,80), (B,4,40,40), (B,80,40,40), (B,4,20,20), (B,80,20,20)。

3. 正负样本匹配策略

YOLOv6 采用的标签匹配策略与 TOOD相同, 前 4 个 epoch 采用 ATSSAssigner 作为标签匹配策略的 warm-up , 后续使用 TaskAlignedAssigner 算法选择正负样本。

3.1 Anchor 设置

YOLOv6 采用与 YOLOX 一样的 Anchor-free 无锚范式,省略了聚类和繁琐的 Anchor 超参设定,泛化能力强,解码逻辑简单。在训练的过程中会根据 feature size 去自动生成先验框。

3.2 Bbox 编解码过程

YOLOv6 的 BBox Coder 采用的是 DistancePointBBoxCoder。

网络 bbox 预测的值为 (top, bottom, left, right),解码器将 anchor point 通过四个距离解码到坐标 (x1,y1,x2,y2)。

3.3 匹配策略
  • 0 <= epoch < 4,使用 BatchATSSAssigner
  • epoch >= 4,使用 BatchTaskAlignedAssigner

ATSSAssigner

ATSSAssigner 是 ATSS 中提出的标签匹配策略。 ATSS 的匹配策略简单总结为:通过中心点距离先验对样本进行初筛,然后自适应生成 IoU 阈值筛选正样本。 YOLOv6 的实现种主要包括如下三个核心步骤:

  1. 因为 YOLOv6 是 Anchor-free,所以首先将 anchor point 转化为大小为 5*strdie 的 anchor。
  2. 对于每一个 GT,在 FPN 的每一个特征层上, 计算与该层所有 anchor 中心点距离(位置先验), 然后优先选取距离 topK 近的样本,作为 初筛样本
  3. 对于每一个 GT,计算其 初筛样本 的 IoU 的均值 mean与标准差 std,将 mean + std 作为该 GT 的正样本的 自适应 IoU 阈值 ,大于该 自适应阈值 且中心点在 GT 内部的 anchor 才作为正样本,使得样本能够被 assign 到合适的 FPN 特征层上。

下图中,(a) 所示中等大小物体被 assign 到 FPN 的中层,(b) 所示偏大的物体被 assign 到 FPN 中检测大物体和偏大物体的两个层。

TaskAlignedAssigner

TaskAlignedAssigner 是 TOOD中提出的一种动态样本匹配策略。 由于 ATSSAssigner 是属于静态标签匹配策略,其选取正样本的策略主要根据 anchor 的位置进行挑选, 并不会随着网络的优化而选取到更好的样本。在目标检测中,分类和回归的任务最终作用于同一个目标,所以 TaskAlignedAssigner 认为样本的选取应该更加关注到对分类以及回归都友好的样本点。

TaskAlignedAssigner 的匹配策略简单总结为: 根据分类与回归的分数加权的分数选择正样本

  1. 对于每一个 GT,对所有的 预测框 基于 GT类别对应分类分数预测框与 GT 的 IoU 的加权得到一个关联分类以及回归的对齐分数 alignment_metrics。
  2. 对于每一个 GT,直接基于 alignment_metrics 对齐分数选取 topK 大的作为正样本。

因为在网络初期参数随机, 分类分数 和 预测框与 GT 的 IoU 都不准确,所以需要经过前 4 个 epoch 的 ATSSAssigner 的 warm-up。经过预热之后的 TaskAlignedAssigner 标签匹配策略就不使用中心距离的先验, 而是直接对每一个GT 选取 alignment_metrics 中 topK 大的样本作为正样本。

4. Loss 设计

参与 Loss 计算的共有两个值:loss_cls 和 loss_bbox,其各自使用的 Loss 方法如下:

  • Classes loss:使用的是 mmdet.VarifocalLoss
  • BBox loss:l/m/s使用的是 GIoULoss, t/n 用的是 SIoULoss

权重比例是:loss_cls : loss_bbox = 1 : 2.5

4.1 分类损失函数 VarifocalLoss

Varifocal Loss (VFL) 是 VarifocalNet: An IoU-aware Dense Object Detector中的损失函数。

VFL 是在 GFL 的基础上做的改进

在上述标签匹配策略中提到过选择样本应该优先考虑分类回归都友好的样本点, 这是由于目标检测包含的分类与回归两个子任务都是作用于同一个物体。 与 GFL 思想相同,都是将 预测框与 GT IoU 软化作为分类的标签,使得分类分数关联回归质量, 使其在后处理 NMS 阶段有分类回归一致性很强的分值排序策略,以达到选取优秀预测框的目的。

Varifocal Loss 原本的公式:

​其中 𝑞 是预测 bboxes 与 GT 的 IoU,使用软标签的形式作为分类的标签。 𝑝∈[0,1] 表示分类分数。

  1. 对于负样本,即当 𝑞=0 时,标准交叉熵部分为 −log⁡(𝑝),负样本权重使用 𝛼𝑝^𝛾 作为 focal weight 使样本聚焦与困难样本上,这与 Focal Loss 基本一致。
  2. 对于正样本,即当 𝑞>0 时,首先计算标准二值交叉熵部分

    但是针对正样本的权重设置,Varifocal Loss 中并没有采用类似 𝛼𝑝𝛾的方式降权, 而是认为在网络的学习过程中正样本相对于负样本的学习信号来说更为重要,所以使用了分类的标签 𝑞, 即 IoU 作为 focal weight, 使得聚焦到具有高质量的样本上。

但是 YOLOv6 中的 Varifocal Loss 公式采用 TOOD 中的 Task ALignment Learning (TAL), 将预测的 IoU 根据之前标签匹配策略中的分类对齐度 alignment_metrics 进行了归一化, 得到归一化 𝑡^。 具体实现方式为:

对于每一个 Gt,找到所有样本中与 Gt 最大的 IoU,具有最大 alignment_metrics 的样本位置的 t=max(Iou)

t=AlignmentMetrics/maxAlignmentMetrics*maxIoU

最终 YOLOv6 分类损失损失函数为:

4.2 回归损失函数 GIoU Loss / SIoU Loss

在 YOLOv6 中,针对不同大小的模型采用了不同的回归损失函数,其中 l/m/s使用的是 GIoULoss, t/n 用的是 SIoULoss。

其中GIoULoss 详情请看Loss—— 百面算法工程师 | 损失函数篇-CSDN博客

SIou Loss

SIoU 损失函数是 SIoU Loss: More Powerful Learning for Bounding Box Regression 中提出的度量预测框与 GT 的匹配度的指标,由于之前的GIoU, CIoU, DIoU 都没有考虑预测框向 GT 框回归的角度,然而角度也确实是回归中一个重要的影响因素,因此提出了全新的SIoU。

SIoU 损失主要由四个度量方面组成:

  • IoU成本
  • 角度成本
  • 距离成本
  • 形状成本

如下图所示,角度成本 就是指图中预测框 𝐵 向 𝐵𝐺𝑇 的回归过程中, 尽可能去使得优化过程中的不确定性因素减少,比如现将图中的角度 𝛼 或者 𝛽 变为 0 ,再去沿着 x 轴或者 y 轴去回归边界。

​Object Loss

在 YOLOv6 中,由于额外的置信度预测头可能与 Aligned Head 有所冲突,经实验验证在不同大小的模型上也都有掉点, 所以最后选择弃用 Objectness 分支。

1.5 优化策略和训练过程

1.5.1 优化器分组

与 YOLOv5 一致,详情请看 YOLOv5 优化器分组

1.5.2 weight decay 参数自适应

与 YOLOv5 一致,详情请看 YOLOv5 weight decay 参数自适应

1.6 推理和后处理过程

YOLOv6 后处理过程和 YOLOv5 高度类似,实际上 YOLO 系列的后处理逻辑都是类似的。 详情请看YOLOv5 推理和后处理过程

再次放上YOLOv5的面试总结,方便大家阅读

百面算法工程师 | YOLOv5面试考点原理全解析_yolov5面试详解-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/12633.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

压力给到 Google,OpenAI 发布 GPT-4o 来了

北京时间5月14日凌晨1点&#xff0c;OpenAI 开启了今年的第一次直播&#xff0c;根据官方消息&#xff0c;这次旨在演示 ChatGPT 和 GPT-4 的升级内容。在早些时候 Sam Altman 在 X 上已经明确&#xff0c;「我们一直在努力开发一些我们认为人们会喜欢的新东西&#xff0c;对我…

jar包安装成Windows服务

一、前言 很多年前写过一篇《使用java service wrapper把windows flume做成服务》的文章&#xff0c;也是把jar包安装成windows服务&#xff0c;今天介绍另外一种更简便的方案。 二、正片 这次使用的工具是 winsw&#xff0c;一个Windows服务包装器。下面看详细介绍 首先从g…

momentjs

Moment.js 是一个用于处理日期和时间的 JavaScript 库&#xff0c;它提供了许多方便的函数和方法来操作、格式化和解析日期时间。官网 常见用法 格式化日期时间&#xff1a;可以使用format方法将日期时间格式化为指定的字符串格式&#xff0c;例如YYYY-MM-DD HH:mm:ss。获取日…

中国CEO直播简史

图片&#xff5c;电影《教父》截图 ©自象限原创 作者丨罗辑 编辑丨程心 领导人爱对外发言这事&#xff0c;是中国的一个传统文化。 从乾隆爱往名画上盖章上&#xff0c;就可见一斑。 3Q大战时代&#xff0c;微博成了大佬“吵架”的战场&#xff0c;饭否变成了部分爱…

Digimat在电池壳体SMC复合材料成型工艺中的应用

SMC工艺介绍及挑战 SMC&#xff08;Sheet Molding Compound的缩写&#xff0c;即片状模塑料&#xff09;是一种复合材料制造工艺。该工艺可以有效地代替金属&#xff0c;实现车辆轻量化目标。该工艺不仅能够显著降低车身重量&#xff0c;而且设计灵活&#xff0c;操作简单、易…

社交媒体的探索者:探寻Facebook的发展历程

在当今数字化时代&#xff0c;社交媒体已经成为了人们日常生活中不可或缺的一部分&#xff0c;而Facebook作为最具影响力的社交平台之一&#xff0c;其发展历程承载着无数的探索与创新。本文将深入探讨Facebook的发展历程&#xff0c;从其创立初期到如今的全球化影响&#xff0…

数据结构与算法学习笔记九---循环队列的表示和实现(C++)

目录 前言 1.为什么要使用循环队列 2.队列的顺序存储方式的实现 1.定义 2.队列初始化 3.销毁 4.清空队列 5.队列是否为空 6.队列长度 7.队头 8.入队 9.出队 10.遍历队列 11.完整代码 3.参考资料 前言 这篇文章介绍循环队列的表示和用法。 1.为什么要使用循环队…

OpenAI 重磅发布:ChatGPT Mac 桌面应用震撼上线!

OpenAI 重磅发布&#xff1a;ChatGPT Mac 桌面应用震撼上线&#xff01; 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff0…

51单片机:点亮一个LED灯

1.新建工程 选择AT89C52&#xff0c;在Atmel下显示的是See Microchip 并不需要添加启动文件到文件夹中。 添加main.c文件&#xff0c;c比cpp效率高&#xff0c;.asm汇编即更底层 程序编写好后 nop(); 该函数在这个头文件里面 #include <INTRINS.H> #include <R…

Java JDK下载安装教程(2024年)

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…

2024 Google I/O Android 相关内容汇总

2024 Google I/O Android 相关内容汇总 本次 Google I/O 的核心虽然是 AI &#xff0c;但是 Android 也是作为主要议题出现&#xff0c; Android 部分可以简单分为产品和开发相关内容&#xff0c;接下来主要介绍这两部分的相关更新。 重点开始开发相关&#xff0c;内容不少 产…

业务系统加固和安全设备加固

业务系统加固 业务系统包含哪些系统? 业务系统漏洞面临的风险 1web风险 2漏洞扫描&#xff0c;端口扫描 3系统漏洞 4逻辑漏洞 5 信息泄露 6拒绝服务 7口令爆破 加固方式&#xff1a; 在风险加上修复 1web漏洞&#xff1a; 包括csrf,xss&#xff0c;口令破解等等 修…

koa2 + jsonwebtoken + koa-jwt:实现node token验证

一、koa token生成、验证 koa-jwt官网 https://github.com/koajs/jwt 推荐一个koa-jwt学习文档&#xff1a; https://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html jsonwebtoken方法添加 const { sign, verify } require(jsonwebtoken); const secretKey …

ICode国际青少年编程竞赛- Python-4级训练场-列表综合练习

ICode国际青少年编程竞赛- Python-4级训练场-列表综合练习 1、 Flyer[3].step(1) Flyer[7].step(2) Flyer[11].step(1) for i in range(4):Flyer[i * 2].step(1) Flyer[8].step(3)for i in range(3):Dev.turnRight()Dev.step(-5)2、 for i in range(5):Flyer[i5].step(Flyer[…

JavaWeb--18 tlias-web-management 登录认证

登录认证 1 登录功能功能开发 2 登录校验2.1 问题分析2.2 会话技术CookieSession令牌技术 2.3 JWT令牌介绍生成和校验登录下发令牌 2.4 过滤器Filter拦截路径过滤器链 登录校验-Filter 2.5 拦截器InterceptorInterceptor详解执行流程 登录校验- Interceptor 3 异常处理3.1 当前…

【会议征稿】2024年机器人前沿技术与创新国际会议(FTIR 2024, 7/19-21)

2024年机器人前沿技术与创新国际会议&#xff08;FTIR 2024&#xff09;将于2024年7月19-21日在中国杭州举行。FTIR 2024聚焦前沿技术与创新&#xff0c;将把机器人领域的创新学者和专家聚集到一个共同的论坛。会议的主要目标是促进机器人的研究和开发活动&#xff0c;另一个目…

基于EBAZ4205矿板的图像处理:11阈值系数可调的图像局部阈值二值化

基于EBAZ4205矿板的图像处理&#xff1a;11阈值系数可调的图像局部阈值二值化 先看效果 还是一样拿我的pynq当模特&#xff0c;然后用usb——HDMI采集卡把输出图像采集到电脑上。 注意看右边mobelxtem中的通过串口调节的参数&#xff0c; 我这里是实现了阈值系数可调的局部阈…

利用CAD绘制角度斜线的简易指南---模大狮模型网

在CAD设计中&#xff0c;绘制角度斜线是常见的需求&#xff0c;尤其在工程、建筑等领域中。正确绘制角度斜线不仅可以提高图纸的清晰度和美观度&#xff0c;还有助于准确表达设计意图。本文将介绍如何利用CAD软件进行角度斜线的绘制&#xff0c;为您提供简明易懂的操作指南。 一…

安全设备篇——抗DDOS设备

写在前面&#xff1a;up初研究这个设备的时候以为很容易&#xff0c;毕竟ddos嘛大家都懂&#xff0c;但是实际去找资料和研究的时候发现资料少的可怜&#xff0c;再加上大家知道ddos但大多没见过&#xff0c;万幸up的老东家某普有这类设备&#xff0c;和之前的同事沟通了一下还…

网络完全精通版

一、目录结构 1.1目的的特点 windows和linux windows中C、D、E盘&#xff0c;每个都是一个根系统【多跟系统】 linux中只有一个根【单根系统】 1.2各个目录存储的内容 /root&#xff1a;linux中挂管理员用户的家目录 /home&#xff1a;linux中挂存储普通用户的家目录的目…