Python 全栈体系【四阶】(三十九)

第五章 深度学习

八、目标检测

3. 目标检测模型

3.2 YOLO 系列
3.2.4 YOLOv4(2020 年 4 月)

YOLOv4 将最近几年 CV 界大量的研究成果集中在一套模型中,从检测速度、精度、定位准确率上有了明显改善(相对于 YOLOv3,AP 值和 FPS 分别上涨了 10%和 12%)。YOLOv4 主要改进点有:

  • 输入端。采用更大的输入图像,采用新的样本增强方法;
  • 骨干网。采用新的、改进的骨干网 CSPDarknet53;新的激活函数和 dropout 策略;
  • 特征融合部分。插入 SPP,FPN+PAN 等新的结构;
  • 输出端。采用改进的损失函数。
3.2.4.1 Backbone, Neck, Head

首先,作者提出了一个目标检测的通用框架,将一个目标检测框架分为 Input,Backbone,Neck,Head 几个部分:

  • Input(输入):输入部分,如图像、批次样本、图像金字塔
  • Backbone(骨干网):各类 CNN,主要作用是对图像中的特征做初步提取
  • Neck(脖子):特征融合部分,主要作用是实现多尺度检测
  • Head(头):产生预测结果

YOLOv4 从以上几个结构部分均进行了优化和改进,取得了较好的综合效果。

3.2.4.2 模型结构

YOLOv4 模型结构如下图所示:

在这里插入图片描述

3.2.4.3 主要改进
  • 输入端

    (1)Mosaic 数据增强。Mosaic 是参考 2019 年提出的 CutMix 数据增强的方式,但 CutMix 只使用了两张图片进行拼接,而 Mosaic 数据增强则采用了 4 张图片,随机缩放,随机裁剪,随机排布的方式进行拼接 。这样使得模型更获得更多相关或不相关的上下文信息,学习到更加鲁棒的特征。
    在这里插入图片描述

    (2)自对抗训练(SAT,Self Adversarial Trainning)。自对抗训练代表了一种新的数据增强技术,操作在两个向前后阶段。在第一阶段,神经网络改变原始图像而不是网络权值。通过这种方式,神经网络对自己进行了对抗性的攻击,改变原始图像来制造图像上没有需要的对象的假象。在第二阶段,训练神经网络以正常的方式在修改后的图像上检测目标。

    (3)CmBN(交叉小批量归一化)。BN 策略可以缓解梯度消失、过拟合,增加模型稳定性。BN 在计算时仅仅利用当前迭代批次样本进行计算,而 CBN 在计算当前时刻统计量时候会考虑前 k 个时刻统计量,从而实现扩大 batch size 操作。CmBN 是 CBN 的修改版,CBN 在第 t 时刻,也会考虑前 3 个时刻的统计量进行汇合。

  • Backbone 部分

    (1)CSPDarknet53。CSPDarknet53 是在 YOLOv3 主干网络 Darknet53 的基础上,借鉴 2019 年的 CSPNet 的经验,产生的 Backbone 结构,其中包含了 5 个 CSP 模块。 其结构如下图所示:
    在这里插入图片描述
    CSPNet(Cross Stage Partial Network,跨阶段局部网络)主要用来提高学习能力同时,降低模型对资源的消耗。每个 CSPX 中包含 3+2 × X 个卷积层,因此整个主干网络 Backbone 中一共包含
    2+(3+2×1)+2+(3+2×2)+2+(3+2×8)+2+(3+2×8)+2+(3+2×4)+1=72 个卷积层。每个 CSP 模块前面的卷积核大小都是 3x3,步长为 2,因此可以起到下采样的作用。因为 Backbone 有 5 个 CSP 模块,输入图像是 608 x 608,所以特征图的变化规律是:608->304->152->76->38->19 经过 5 次 CSP 模块后得到 19*19 大小的特征图。Backbone 采用 Mish 激活函数。

    (2)Mish 激活函数。一种新的、非单调、平滑激活函数,其表达式为 f ( x ) = x ∗ t a n h ( l o g ( 1 + e x ) ) f(x) = x*tanh(log(1+e^x)) f(x)=xtanh(log(1+ex)),更适合于深度模型。根据论文实验,精度比 ReLU 略高。
    在这里插入图片描述

    (3)Dropblock 策略。Dropblock 是一种针对卷积层的正则化方法,实验在 ImageNet 分类任务上,使用 Resnet-50 结构,能够将分类精度提高 1.6%,在 COCO 检测任务上,精度提升 1.6%。其原理是在特征图上通过 dropout 一部分相邻的区域,使得模型学习别的部位的特征,从而表现出更好的泛化能力。
    在这里插入图片描述
    Dropblock 模块主要有两个参数,block_size 和 γ。其中,block_size 表示区域的大小,正常可以取 3,5, 7,当 block_size=1 时,dropout 退化为传统的 dropout。

  • Neck 部分

    (1)SPP 模块。SPP 模块位于 Backbone 网络之后,使用 k={1x1, 5 x 5, 9 x 9, 13 x 13}最大池化操作,再将不同尺度的特征图进行 Concat 融合。
    在这里插入图片描述

    (2)FPN + PAN. FTP 指特征金字塔,其思想是将高层次卷积得到的较小特征图进行上采样,和低层次较大的特征图进行特征融合(自顶向下),这样做的优点是将高层次较强的语义特征传递下来。而 PAN 结构借鉴 2018 年图像分割领域 PANet(Path Aggregation Network,路径聚合网络)的创新点,FPN 的后面添加一个自底向上的特征金字塔,将低层次强定位特征传递上来(自底向上),从而形成对 FPN 的补充。如下图所示:
    在这里插入图片描述

  • Head 部分

    (1)CIOU_loss。IOU 用来度量预测定位是否准确,但存在一定的问题,如下图所示:
    在这里插入图片描述

    针对以上问题,出现了几个 IOU 的改进策略:

    GIOU_loss:在 IOU 的基础上,解决了边界框不重合的问题

    DIOU_loss:在 IOU 和 GIOU 的基础上,考虑了边界框中心点距离的信息

    CLOU_Loss: 在 DIOU 的基础上,考虑边界框宽高比的尺度信

    所以,CIOU_loss 在定义预测 box、真实 box 损失值时,考虑了重叠面积大小、中心点距离、长宽比例,定位更加精确。CIOU_loss 定义如下:

    L C I O U = 1 − I o U + ρ 2 ( b , b g t ) c 2 + α v L_{CIOU} = 1 - IoU + \frac{\rho^2(b, b^{gt})}{c^2} + \alpha v LCIOU=1IoU+c2ρ2(b,bgt)+αv

    其中, ρ \rho ρ表示欧式距离,c 表示覆盖两个 box 的最小封闭盒子对角线长度, α \alpha α是一个正的权衡参数,v 衡量长宽比的一致性,分别定义为:

    v = 4 π 2 ( a r c t a n w g t h g t − a r c t a n w h ) 2 v = \frac{4}{\pi ^2}(arctan \frac{w^{gt}}{h^{gt}} - arctan \frac{w}{h})^2 v=π24(arctanhgtwgtarctanhw)2

    α = v ( 1 − I o U ) + v \alpha = \frac{v}{(1 - IoU) + v} α=(1IoU)+vv

    (2)DIOU_NMS。NMS 主要用于预测框的筛选,YOLOv4 使用 DIOU 来进行 NMS(即选择 DIOU 最大的值),实验证明在重叠目标的检测中,DIOU_NMS 的效果优于传统的 NMS。如下图所示:

    在这里插入图片描述

3.2.4.4 效果

在这里插入图片描述

3.2.5 YOLOv5(2020 年 6 月)

YOLOv5 在 YOLOv4 基础上,做了一些工程和代码方面的优化。YOLOv5 是否为一个独立的版本,目前还存在争议,有些人认为其创新度不够,不能称为一个独立的版本。YOLOv5 没有发表论文,通过对其代码(https://github.com/ultralytics/yolov5)进行分析,可以总结出一些改进优化之处。

YOLOv5 提供了四个版本:Yolov5s,Yolov5m,Yolov5l,Yolov5x。其中,Yolov5s 是 Yolov5 系列中深度最小,特征图的宽度最小的网络,后面的 3 种都是在此基础上不断加深,不断加宽,从而增加模型性能。

在这里插入图片描述

3.2.5.1 改进
  • 采用自适应锚框计算。YOLOv5 针对不同数据集,采用不同配置的 Anchors,每次训练时,自适应的计算不同训练集中的最佳锚框值;

  • 自适应图片缩放。在常用的目标检测算法中,不同的图片长宽都不相同,因此常用的方式是将原始图片统一缩放到一个标准尺寸,再送入检测网络中。Yolov5 代码中对此进行了改进,作者认为,在项目实际使用时,很多图片的长宽比不同,因此缩放填充后,两端的黑边大小都不同,而如果填充的比较多,则存在信息冗余,影响推理速度。YOLOv5 对原始图像进行计算,自适应对图像添加最少的边沿部分;

  • 加入 Focus 结构。YOLO5 在骨干网部分加入了 Focus 结构,采用切片操作,将大图像降采样为通道数更多的小图像,然后进行卷积运算,提取特征,如下图所示:

在这里插入图片描述

  • 两种结构的 CSP 模块,加强网络特征融合的能力,如下图所示:
    在这里插入图片描述
3.2.5.2 整体结构

在这里插入图片描述

3.2.5.3 不同深度与宽度

以下是不同结构的深度差异:

在这里插入图片描述

以下是不同模型的宽度差异:
在这里插入图片描述

3.2.5.4 结论

YOLOv5 虽然创新性不足,但在代码和工程方面做了很多优化,模型参数更少(YOLOv5 大小仅有 27M,YOLOv4 为 244M,两者性能相当),使用配置更加方便,更适合移动端使用,是继 YOLOv3 之后的又一个主流版本。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Springboot的家具网站

基于SpringbootVue的家具网站设计与实现 开发语言:Java数据库:MySQL技术:SpringbootMybatis工具:IDEA、Maven、Navicat 系统展示 用户登录 首页 商家 家具信息 家居资讯 后台管理 后台首页 用户管理 商家管理 家具类型管理 家具…

ASV1000视频监控平台:通过SDK接入海康网络摄像机IPC

目录 一、为何要通过SDK接入海康网络摄像机 (一)海康网络摄像机的SDK的功能 1、视频采集和显示 2、视频存储 3、视频回放 4、报警事件处理 5、PTZ控制 6、自定义设置 7、扩展功能 (二)通过SDK接入的好处(相对…

JavaEE初阶-多线程易忘点总结

文章目录 1.PCBPID文件描述符表内存指针状态上下文优先级记账信息tgid 2.线程与进程的区别3.sleep和interrupt方法的关系变量终止线程interrupt方法终止线程 4.线程状态5.出现线程不安全的原因线程在系统中是随即调度,抢占式执行的。多个线程修改同一个变量线程针对…

Adobe 更新 Firefly Image 3 图像生成模型

一个工具或者模型,对于初次使用的人来说,易用性和超出预期的效果很能吸引使用者,suno和mj在这方面我感觉确实不错,第一次使用感觉很惊艳。 Adobe 更新 Firefly Image 3 图像生成模型,我用了mj的提示词,最后…

列转行(spark 与presto语法)

一、Presto 语法 原始数据: 期望数据: 代码: SELECT info, value FROM ( select 张三 as name,18 as age,男 as gender,清华 as schoolunion allselect 李四 as name,18 as age,男 as gender,清华 as school ) as a CROSS JOIN UNNEST(…

关于YOLO8学习(六)安卓部署ncnn模型--图片检测

前文 关于YOLO8学习(一)环境搭建,官方检测模型部署到手机 关于YOLO8学习(二)数据集收集,处理 关于YOLO8学习(三)训练自定义的数据集 关于YOLO8学习(四)模型转换为ncnn 关于YOLO8学习(五)安卓部署ncnn模型–视频检测 简介 前文第五章,讲述了部署自定义模型后,进…

Java--方法的使用

1.1什么是方法 方法顾名思义就是解决问题的办法,在程序员写代码的时候,会遇到很多逻辑结构一样,解决相同问题时,每次都写一样的代码,这会使代码看起来比较绒余,代码量也比较多,为了解决这个问题…

分拣机器人也卷的飞起来了

导语 大家好,我是智能仓储物流技术研习社的社长,老K。专注分享智能仓储物流技术、智能制造等内容。 新书《智能物流系统构成与技术实践》 智能制造-话题精读 1、西门子、ABB、汇川:2024中国工业数字化自动化50强 2、完整拆解:智能…

foobar2000 for Mac:卓越音乐播放器

当您在寻找一款音质卓越、功能丰富的音频播放器时,foobar2000 for Mac无疑是您的首选。它拥有简洁明了的界面设计,易于上手,同时支持多种音频格式,让您无需担心兼容性问题。 foobar2000 for Mac v2.6.4免激活版下载 foobar2000 fo…

匹配网络(Matching Networks)和原型网络(Prototypical Networks):区别详解

匹配网络(Matching Networks)和原型网络(Prototypical Networks) 匹配网络与原型网络:区别详解匹配网络(Matching Networks)核心特点:应用场景: 原型网络(Pro…

威尔科克森秩和检验 (Wilcoxon rank-sum test)-- 代码实现

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟 🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号&#xf…

设计模式之业务代表模式

在编程江湖的风雨中漂泊多年,每当我遇到那些错综复杂的业务逻辑和系统交互,总有一个模式像一位忠诚的骑士,默默守护着我的代码城堡,那就是——业务代表模式(Business Delegate Pattern)。它不是最耀眼的明星…

一键实现在VS Code中绘制流程图

VS Code是一款常用的IDE,受到许多用户的欢迎和喜爱。而其较为出众的一点,就是较好的可拓展性,即丰富的插件应用,这些应用可以极大地提高生产效率,并优化日常使用。 流程图是一种直观的图示方法,可以用简明…

家庭用水安全新举措:保障自来水管和储水设施卫生

随着公众对家庭用水安全意识的提高,如何确保自来水管和楼顶储水罐的安全性和卫生已成为家庭生活中的重要议题。近期,专家针对此问题提出了一系列实用的注意事项和建议。 注意事项: 定期检查:专家强调,家庭应每季度至…

eNSP-静态路由配置

一、拓扑图搭建 二、主机ip、掩码、网关设置 pc1 pc2 三、路由器配置 1.AR1ip地址及路由配置 <Huawei>sys #进入系统视图 [Huawei]int g0/0/0 #进入0/0/0接口 [Huawei-GigabitEthernet0/0/0]ip address 192.168.0.2 24 #设置ip地址 [Huawei-GigabitEthernet0/0/0]q #…

基础IO认识

回顾文件 我们之前认识文件只是在语言程度上理解&#xff0c;但是我们理解的不够彻底&#xff0c;要想真正理解文件要在os上理解。 简单代码认识 1 #include<stdio.h>2 int main(){3 FILE* fpfopen("log.txt","w");4 if(fpNULL){5 p…

浅析边缘计算技术

概念 边缘计算是一种分布式计算范式&#xff0c;它将计算任务和数据存储从中心化的云端推向网络的边缘&#xff0c;即设备或终端&#xff0c;以提高响应速度和降低网络带宽需求。在边缘计算中&#xff0c;数据在源头附近进行处理和分析&#xff0c;而不需要将所有数据传输到…

21世纪世界十大名人颜廷利:真正的幸福是快乐, 真正的理想是远航

真正的财富是分享, 真正的情感是珍藏; 真正的人生是奋斗, 真正的自由是飞翔; 真正的幸福是快乐, 真正的理想是远航… &#xff08;升命学说&#xff09; 21世纪东方哲学家思想家、科学家、当代中国教育界知名教授、专业周易起名改名字、易经姓名学专家、目前比较有影响力的人…

【C++第七课-string用法】

这里写自定义目录标题 string的初步介绍sring的构造函数string的构造函数-重点掌握无参的构造函数用常量字符串来初始化拷贝构造 string的构造函数-非重点掌握拷贝字符串str从pos位置开始的len个字符拷贝字符串s的前n个字符用n个c去初始化 string的赋值string的遍历和访问下标[…

docker如何生成springboot镜像

1、在springboot的jar包所在的目录下创建Dockerfile文件&#xff0c;此案例的目录为/usr/java Dockerfile的文件内容如下&#xff1a; FROM openjdk:8 LABEL author"zengyanhui" LABEL email"1181159889qq.com" WORKDIR /usr/java/springbootdemo COPY s…