位置: IT常识 - 正文

目标检测算法——YOLOV7——详解(一阶段目标检测算法)

编辑:rootadmin
目标检测算法——YOLOV7——详解 1、主要贡献

推荐整理分享目标检测算法——YOLOV7——详解(一阶段目标检测算法),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:目标检测算法有哪些,一阶段目标检测算法,最新目标检测算法,3d目标检测算法,目标检测算法排名,目标检测算法的主要目的是找到图像中用户感兴趣的,目标检测算法的主要目的是找到图像中用户感兴趣的,目标检测算法排名,内容如对您有帮助,希望把文章链接给更多的朋友!

    主要是现有的一些trick的集合以及模块重参化和动态标签分配策略,最终在 5 FPS 到 160 FPS 范围内的速度和准确度都超过了所有已知的目标检测器。

    当前目标检测主要的优化方向:更快更强的网络架构;更有效的特征集成方法;更准确的检测方法;更精确的损失函数;更有效的标签分配方法;更有效的训练方法。

2、主要思路

    按照论文,目前模型精度和推理性能比较均衡的是yolov7 模型(对应的开源git版本为0.1版)。根据源码+导出的onnx文件+“张大刀”等的网络图(修改了其中目前我认为的一些bug,增加一些细节)。重新绘制了yoloV7 0.1版本的非常详尽网络结构。注意:

    1)其中的特征图结果维度注释是按照箭头的流方向,不是固定的上下方向。

    2)输入输出仅仅是指当前模块的输入输出,整体需要根据流方向累乘计算最终的结果。

    3)该模型版本没有辅助训练头。

    整体上和YOLOV5是相似的,主要是网络结构的内部组件的更换(涉及一些新的sota的设计思想)、辅助训练头、标签分配思想等。整体预处理、loss等可参考yolov5: 目标检测算法——YOLOV5_TigerZ*的博客-CSDN博客_目标检测yolov5

    

3、具体细节    1)input

    整体复用YOLOV5的预处理方式和相关源码,唯一需要注意的是,官方主要是在640*640和1280*1280这样的相对较大的图片上进行的训练和测试。

    具体参考我的另一篇YOLOV5博客中的 “具体细节” -> ‘input’ 章节即可。目标检测算法——YOLOV5_TigerZ*的博客-CSDN博客_目标检测yolov5

    2)backbone

    主要是使用ELAN(该版本模型并没有使用论文里提到的最复杂的E-ELAN结构) 和 MP 结构。该版本模型的激活函数使用的是Silu。

    详细可以参考源码的 cfg/training/yolov7.yaml 文件 + models/yolo.py 文件 + 使用 export.py 导出onnx 结构使用 netron等软件来梳理。

    a.ELAN结构

    通过控制最短最长的梯度路径,更深的网络可以有效地学习和收敛。作者提出ELAN结构。基于ELAN设计的E-ELAN 用expand、shuffle、merge cardinality来实现在不破坏原有梯度路径的情况下不断增强网络学习能力的能力。(PS:该版本模型以及E6E网友反馈均未实现E-ELAN),论文中相关的图如下,其中的cross stage connection 其实就是1*1卷积:

    简化如下:

    

    

b.MP 结构

    个人认为这是一个相对鸡贼的结构,之前下采样我们通常最开始使用maxpooling,之后大家又都选用stride = 2的3*3卷积。这里作者充分发挥:“小孩子才做选择,大人都要”的原则,同时使用了max pooling 和 stride=2的conv。  需要注意backbone中的MP前后通道数是不变的。

3)neck & head

    检测头整体结构和YOLOV5类似,仍然是anchor based 结构,仍然没有使用YOLOX 和YOLOV6 的解耦头(分类和检测)思路,这一点目前不太理解,后续有精力可以魔改一下。主要是使用了:

    *SPPCSPC结构

    *ELAN-W(我自己命名非官方名字,因为基本上和ELAN类似,但是又不是论文中的E-ELAN)

    *MP 结构(和backbone参数不同)

    *比较流行的重参数化结构Rep结构

    以上参见本篇博客中的“主要思路”中的整体图,里面就有可视化的这些部件,可以非常直观的理解这些结构。详细可以参考源码的 cfg/training/yolov7.yaml 文件 + models/yolo.py 文件 + 使用 export.py 导出onnx 结构使用 netron等软件来梳理。

4)loss function

    主要分带和不带辅助训练头两种,对应的训练脚本是train.py 和 train_aux.py。

    不带辅助训练头(分损失函数和匹配策略两部分讨论)。

    损失函数

目标检测算法——YOLOV7——详解(一阶段目标检测算法)

    整体和YOLOV5 保持一致,分为坐标损失、目标置信度损失(GT就是训练阶段的普通iou)和分类损失三部分。其中目标置信度损失和分类损失采用BCEWithLogitsLoss(带log的二值交叉熵损失),坐标损失采用CIoU损失。详细参见utils/loss.py 里面的 ComputeLossOTA 函数 配合 配置文件里的各部分的权重设置。

    匹配策略

    主要是参考了YOLOV5 和YOLOV6使用的当下比较火的simOTA.

    S1.训练前,会基于训练集中gt框,通过k-means聚类算法,先验获得9个从小到大排列的anchor框。(可选)

    S2.将每个gt与9个anchor匹配:Yolov5为分别计算它与9种anchor的宽与宽的比值(较大的宽除以较小的宽,比值大于1,下面的高同样操作)、高与高的比值,在宽比值、高比值这2个比值中,取最大的一个比值,若这个比值小于设定的比值阈值,这个anchor的预测框就被称为正样本。一个gt可能与几个anchor均能匹配上(此时最大9个)。所以一个gt可能在不同的网络层上做预测训练,大大增加了正样本的数量,当然也会出现gt与所有anchor都匹配不上的情况,这样gt就会被当成背景,不参与训练,说明anchor框尺寸设计的不好。

    S3.扩充正样本。根据gt框的中心位置,将最近的2个邻域网格也作为预测网格,也即一个groundtruth框可以由3个网格来预测;可以发现粗略估计正样本数相比前yolo系列,增加了三倍(此时最大27个匹配)。图下图浅黄色区域,其中实线是YOLO的真实网格,虚线是将一个网格四等分,如这个例子中,GT的中心在右下虚线网格,则扩充右和下真实网格也作为正样本。

    S4.获取与当前gt有top10最大iou的prediction结果。将这top10 (5-15之间均可,并不敏感)iou进行sum,就为当前gt的k。k最小取1。

    S5.根据损失函数计算每个GT和候选anchor损失(前期会加大分类损失权重,后面减低分类损失权重,如1:5->1:3),并保留损失最小的前K个。

    S6.去掉同一个anchor被分配到多个GT的情况。

    带辅助训练头(分损失函数和匹配策略两部分讨论)。

    论文中,将负责最终输出的Head为lead Head,将用于辅助训练的Head称为auxiliary Head。本博客不重点讨论,原因是论文中后面的结构实验实现提升比较有限(0.3个点),具体可以看原文。

    

    一些细节:其loss函数和不带辅助头相同,加权系数不能过大(aux head loss 和lead head loss 按照0.25:1的比例),否则会导致lead head出来的结果精度变低。匹配策略和上面的不带辅助头(只有lead head)只有很少不同,其中辅助头:

    *lead head中每个网格与gt如果匹配上,附加周边两个网格,而aux head附加4个网格(如上面导数第二幅图,匹配到浅黄+橘黄共5个网格)。

    *lead head中将top10个样本iou求和取整,而aux head中取top20。

    aux head更关注于recall,而lead head从aux head中精准筛选出样本。

    需要注意依照yolov5中的中心点回归方式,仅能将图中红色特征grid,预测在图中红色+蓝色区域(实线组成的网格代表着特征图grid,虚线代表着一个grid分成了4个象限),是根本无法将中心点预测到gt处(蓝色点)!而该红色特征grid在训练时是会作为正样本的。在aux head中,模型也并没有针对这种情况对回归方式作出更改。所以其实在aux head中,即使被分配为正样本的区域,经过不断的学习,可能仍然无法完全拟合至效果特别好。

5)trics

概述:ELAN设计思想、MP降维组件、Rep结构的思考、正负样本匹配策略、辅助训练头

6)inference

测试阶段(非训练阶段)过程

4、结果

打赏

        你的打赏是我不断分享的动力,羞羞。点这里,嘿嘿。

参考连接

1、yolov7 网络架构深度解析_所向披靡的张大刀的博客-CSDN博客

2、https://d246810g2000.medium.com/%E6%9C%80%E6%96%B0%E7%9A%84%E7%89%A9%E4%BB%B6%E5%81%B5%E6%B8%AC%E7%8E%8B%E8%80%85-yolov7-%E4%BB%8B%E7%B4%B9-206c6adf2e69

3、【yolov7系列二】正负样本分配策略_所向披靡的张大刀的博客-CSDN博客+

4、https://arxiv.org/pdf/2207.02696.pdf

5、深入浅出 Yolo 系列之 Yolov7 基础网络结构详解 - 知乎

6、理解yolov7网络结构_athrunsunny的博客-CSDN博客

7、Yolov7算法卷土重来,精度速度超越所有Yolo算法,Yolov4作者全新力作!

8、深入浅出Yolov7之正负样本分配策略

9、yolov7正负样本分配详解 - 知乎

10、极市开发者平台-计算机视觉算法开发落地平台

本文链接地址:https://www.jiuchutong.com/zhishi/298593.html 转载请保留说明!

上一篇:前端必备:五大css自动化生成网站(稀有级别!)(前端种类)

下一篇:threeJs入门 js引入(threejs怎么用)

  • 新公司如何做好网络推广,常用方法介绍(新公司如何做好销售)

    新公司如何做好网络推广,常用方法介绍(新公司如何做好销售)

  • 荣耀magic3pro怎么截屏(荣耀magic3pro怎么取手机卡)

    荣耀magic3pro怎么截屏(荣耀magic3pro怎么取手机卡)

  • 三星s20怎么关机(三星s20怎么关机重启)

    三星s20怎么关机(三星s20怎么关机重启)

  • 怎么显示文件后缀名(怎么显示文件后缀名格式win7)

    怎么显示文件后缀名(怎么显示文件后缀名格式win7)

  • 三层交换机的功能(三层交换机的功能包括)

    三层交换机的功能(三层交换机的功能包括)

  • 淘宝618预售时间(淘宝618预售是什么时候)

    淘宝618预售时间(淘宝618预售是什么时候)

  • 电脑照片怎么打印出来(电脑照片怎么打包发给别人)

    电脑照片怎么打印出来(电脑照片怎么打包发给别人)

  • 亚马逊账号冻结后资金怎么办(亚马逊账号冻结后的余额处理)

    亚马逊账号冻结后资金怎么办(亚马逊账号冻结后的余额处理)

  • 夏天手机充电很慢(夏天手机充电很烫)

    夏天手机充电很慢(夏天手机充电很烫)

  • v1730da是vivo什么型号手机(v1730ea是vivo什么型号)

    v1730da是vivo什么型号手机(v1730ea是vivo什么型号)

  • 访问控制分为哪三种(访问控制有哪些类型)

    访问控制分为哪三种(访问控制有哪些类型)

  • 千兆路由器辐射大吗(千兆路由器辐射对小孩影响多大)

    千兆路由器辐射大吗(千兆路由器辐射对小孩影响多大)

  • 路由器接口不够用怎么办(路由器接口不够用,怎么添加交换机)

    路由器接口不够用怎么办(路由器接口不够用,怎么添加交换机)

  • 如何将数字设置为上标(如何将数字设置为两位小数)

    如何将数字设置为上标(如何将数字设置为两位小数)

  • 小米平衡车怎么强制关机(小米平衡车怎么使用)

    小米平衡车怎么强制关机(小米平衡车怎么使用)

  • 抖音直播踩雷是什么意思(主播踩雷什么意思)

    抖音直播踩雷是什么意思(主播踩雷什么意思)

  • 哈啰出行助力车怎么充电的(哈啰出行助力车是什么车)

    哈啰出行助力车怎么充电的(哈啰出行助力车是什么车)

  • 开悬浮窗有什么用(开悬浮窗有什么坏处)

    开悬浮窗有什么用(开悬浮窗有什么坏处)

  • 荣耀20s指纹识别在哪里(荣耀20 指纹)

    荣耀20s指纹识别在哪里(荣耀20 指纹)

  • html怎么让div居中(html怎么将div居中)

    html怎么让div居中(html怎么将div居中)

  • 计算机软件分为哪两大类(计算机软件分为系统软件和应用软件操作系统属于)

    计算机软件分为哪两大类(计算机软件分为系统软件和应用软件操作系统属于)

  • 苹果拉黑电话提示什么(iphone手机拉黑电话后 打来电话怎么提示)

    苹果拉黑电话提示什么(iphone手机拉黑电话后 打来电话怎么提示)

  • vivox9的nfc在哪里打开(vivox9的nfc功能在哪里打开)

    vivox9的nfc在哪里打开(vivox9的nfc功能在哪里打开)

  • 8代cpu如何装win7(8代cpu装win7教程)

    8代cpu如何装win7(8代cpu装win7教程)

  • 怎么清空抖音回复消息(怎么删抖音回复)

    怎么清空抖音回复消息(怎么删抖音回复)

  • oppo手机分辨率在哪看(oppo手机分辨率最好的是哪一款)

    oppo手机分辨率在哪看(oppo手机分辨率最好的是哪一款)

  • 360安全浏览器如何更新(360安全浏览器如何清除缓存)

    360安全浏览器如何更新(360安全浏览器如何清除缓存)

  • wifi可使用wps是什么(wifi可使用wps是什么意思怎么连)

    wifi可使用wps是什么(wifi可使用wps是什么意思怎么连)

  • 惨遭Win11“抛弃”的八个功能汇总(微软windows11泄露)

    惨遭Win11“抛弃”的八个功能汇总(微软windows11泄露)

  • 网线插上出现感叹号怎么办(网线插上还是显示红叉)

    网线插上出现感叹号怎么办(网线插上还是显示红叉)

  • 其他负债是流动负债还是非流动负债
  • 违约金的专票能抵扣吗
  • 装修及室内设计实训报告
  • 存续分立的账务处理
  • 摄影服务的开票项目
  • 制造费用结转到辅助生产成本
  • 中小企业所得税优惠政策有哪些
  • 有形动产经营租赁税率
  • 一般纳税人旧货
  • 税款追征期起算点 增值税重新计算
  • 增值税发票抵扣多少个点
  • 企业所得税减半征收政策
  • 公司实行注册资本认缴制
  • 营改增后企业要交哪些税
  • 发票认证了还能退回吗
  • 工会经费可不可以不交
  • 广告费发票的税率
  • 2021年7月1日执行
  • 2017年全国税收收入是多少
  • 租入办公设备的租金计入什么科目
  • 税控盘的抵扣怎么填
  • 工商注销债务承担
  • 收到进项专用发票会计分录
  • 出口退税率和进项一致吗
  • 固定资产折旧的影响因素
  • 苹果手机上传速度很慢
  • 以前年度损益调整结转到哪里
  • 上市公司发行股票会计分录
  • 公司准备上市到真正上市要多久
  • 认缴注册是什么意思
  • win10电源图标灰色无法打开
  • timit数据集
  • html img位置
  • 项目中的问题
  • 玩的最多的手机网游
  • 比利时的平菇能吃吗
  • 巨人堤道上的玄关图片
  • 以其他方式取得土地使用权
  • 金银首饰零售业税负率是多少
  • 奥伊米亚康冬季气温低原因
  • 融资租赁会计处理流程
  • 完成认证后开具什么证明
  • vue3 原理
  • 一般纳税人和小微企业的区别
  • php framework框架
  • 成本票不够怎么做账
  • 债券发行的分录
  • python如何实现事务机制
  • 免税不能抵扣
  • 改良生产线发生的职工薪酬计入期间费用
  • 主营业务成本借贷方向增减
  • 股东权益包括什么科目
  • 销售退货和销售换货的区别
  • 期末应交税费有余额吗
  • 余利宝收益如何算
  • 自查时发现以前的事情
  • 代别人公司发工资是工资薪金还是劳务报酬
  • 发票提前开能入费用吗?
  • 会计凭证要保存多少年企业注销
  • 成本与费用的区别联系
  • 明细账建账的步骤
  • sqlserver 实现分组合并
  • linux系统vim编辑readonly option
  • windows2000自动登陆
  • 安卓设备连接苹果设备
  • centos开启telnet服务
  • linux 安装vs
  • macbook看视频卡顿
  • linux开机后怎么进去系统
  • 演示模式怎么设置
  • Ubuntu如何安装vim编辑器
  • qq空间好友评论别人看不到
  • linux系统主要用途
  • win8平板玩lol
  • linux系统如何安装字体
  • ansi std
  • Node.js中的事件循环是什么
  • linux触控
  • vue@cli
  • 2020各省旅游
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设