yolo网络整理-网络结构原理与anchor

2023-12-19

YOLOv5 是Glenn Jocher等人操刀研发,Ultralytics公司的开源项目, 项目地址可点击 。2020年6月发布以来,Ultralytics公司一直在对项目进行维护与更新,目前repo的star数目突破44k,YOLOv5的功能在迭代中越发强大与完善,目前支持多平台多框架,以及涵盖语义分割等功能,成为越来越强大的检测工具。

1、理解anchor

想要理解检测神经网络,绕不开的就是anchor的具体设定和来源,所以在第一章节我们就聊一聊anchor的起源。
回忆早先处理的人脸识别算法,使用的是Haar级联+boost分类器的方式来做,如果我们要检测下图中小女孩的人脸位置,一个比较简单暴力的方法就是滑窗,我们使用不同大小、不同长宽比的候选框在整幅图像上进行穷尽式的滑窗,然后提取窗口内的特征(例如Haar、LBP、Hog等特征),再送入分类器(SVM、Adaboost等)判断该窗口内包含的是否为人脸。这种方法简单易理解,但是这类方法受限于手动设计的特征,召回率和准确率通常不是很高。

在深度学习时代,大名鼎鼎的RCNN和Fast RCNN依旧依赖滑窗来产生候选框,也就是Selective Search算法,该算法优化了候选框的生成策略,但仍旧会产生大量的候选框,导致即使Fast RCNN算法,在GPU上的速度也只有三、四帧每秒。直到Faster RCNN的出现,提出了RPN网络,使用RPN直接预测出候选框的位置。RPN网络一个最重要的概念就是anchor,启发了后面的SSD和YOLOv2等算法,虽然SSD算法称之为default box,也有算法叫做prior box,其实都是同一个概念,他们都是anchor的别称。

1.1 anchor的概念

Archor就是在图像上预设好的不同大小,不同长宽比的参照框,其实非常类似于上面的滑窗法所设置的窗口大小。举例来说如果我们在38x38、19x19、10x10、5x5的四个特征图上,每张图上分别设置4、6、6、6个不同大小和长宽比的anchor,所以一共有38x38x4+19x19x6+ 10x10x6+5x5x6=8692个anchor。
借助神经网络强大的拟合能力,我们不再需要计算Haar、Hog等特征,直接让神经网络输出,每个anchor是否包含(或者说与物体有较大重叠,也就是IoU较大)物体,以及被检测物体相对本anchor的中心点偏移以及长宽比例。

一般的目标检测网络可能有成千上万个anchor,例如标准SSD在300x300输入下有8732个anchor,在500x500下anchor数量过万。我们拿上图中的三个anchor举例,神经网络的输出,也就是每个anchor认为自己是否含有物体的概率,物体中心点与anchor自身的中心点位置的偏移量,以及相对于anchor宽高的比例。因为anchor的位置都是固定的,所以就可以很容易的换算出来实际物体的位置。以图中的小猫为例,红色的anchor就以99%的概率认为它是一只猫,并同时给出了猫的实际位置相对于该anchor的偏移量,这样,我们将输出解码后就得到了实际猫的位置,如果它能通过NMS(非最大抑制)筛选,它就能顺利的输出来。但是,绿色的anchor就认为它是猫的概率就很小,紫色的anchor虽然与猫有重叠,但是概率只有26%。

1.2 如何科学的设置Anchor

FasterRCNN的RPN网络部分,anchor为三个尺度{128, 256, 512},三个比例{1:1, 1:2, 2:1},所以一共9组anchor。

在SSD论文中,作者使用6组定位层,每个定位层分别有6个anchor(不过第一和最后一个定位层只有4个)。一个尺度,分别有1:1、1:2、2:1、1:3、3:1五个不同宽高比,再加一个与特征图的anchor尺度特异性相关的尺寸,因此共有六个尺寸。

YOLOv3在三个不同尺度,每个尺度三个不同大小的anchor,一共九组。这位退出CV圈的Joseph Redmon大神是在YOLOv2版本开始使用kmeans方法聚类得到合适的anchor。可以得出的是大佬们的anchor数据都是在实际的公开数据集上,都是根据数据的实际分布来设置的,所以,我们在自己的数据集上训练目标检测网络时,也需要针对自身数据分布的特性对Anchor进行针对性的修改,这部分工作在YOLOv5代码仓库中也是有体现的。

本章节参考文献:
新手也能彻底搞懂的目标检测Anchor是什么?

2、网络流程

在理解anchor之后,我们可以理解一下yolo网络架构了。
YOLOv5是对三个尺度的特征图进行目标检测的,即large(大)、medium(中)、small(小)三个尺度。

  1. 准备工作(Input中进行):图片需要经过数据增强(尤其是Mosaic数据增强),并且初始化一组anchor预设(YOLOv5_v6针对不同参数量的模型给出了不同的通用预设)。
  2. 特征提取(Backbone中进行):使用了Conv、C3、SPPF基本结构对输入图片进行特征提取。Conv用于对输入进行下采样(共进行了5次下采样);C3用于对输入进行特征提取、融合,丰富特征的语义信息,在这个过程中使用了Boottleneck减少参数量和计算量、借鉴CSPNet思想增强CNN学习能力;SPPF利用池化、特征融合的方式丰富特征的语义信息,使得最深层的特征图拥有极丰富的语义信息。
  3. 加工特征(Neck中进行):对要进行目标检测的三种尺度的特征图融合浅层特征(浅层特征有利于检测)。v6借鉴了PANet,对提取的特征图融合浅层特征,使得特征图既具有丰富的语义信息又具有物体准确的位置信息。
  4. 预测目标(Head中进行):对加工后的特征图进行预测,根据损失函数(Classificition Loss和Bounding Box Regeression Loss)和优化器优化参数权重。

YOLO内部出现比较多的网络结构,在本章节不进行逐一介绍,可以参考下文的参考文献对此部分内容进行了解。

参考文献:

目标检测:新手也能彻底搞懂的YOLOv5详解
深入浅出Yolo系列之Yolov5核心基础知识完整讲解

3、网络输出与LOSS

3.1网络输出

YOLOv5的输出端主要是预测框,每个预测框由以下信息组成:

  • 置信度(confidence score):表示该框内是否存在目标的概率,取值范围为0到1。

  • 类别概率(class probabilities):表示该框内目标属于各个类别的概率,一般是预先定义好的类别数量。

  • 边界框位置(bounding box coordinates):表示目标的位置和大小,一般用矩形框来表示。

grid cell为20x20,输入为640x640的图像下采样32倍得到20x20,对应输入图像的感受野是32x32;grid cell为40x40,输入为640x640的图像下采样16倍得到40x40,对应输入图像的感受野是16x16;grid cell为80x80,输入为640x640的图像下采样8倍得到80x80,对应输入图像的感受野是8x8。

每个gred cell生成三个锚框,每一个锚框对应一个预测框,每一个预测框有 5(x,y,w,h,置信度) + 80(80个类别的条件概率), 3x85=255。

3.2 NMS非极大值抑制

在目标检测任务中,一个物体可能被多个预测框检测出来,为了避免对同一个物体进行多次检测,需要对重复的预测框进行过滤,这个过程就是非极大值抑制(Non-maximum suppression,简称NMS)。

在YOLOv5中,NMS主要是通过以下几个步骤实现的:

首先,对所有预测框按照置信度从高到低进行排序。

然后,从置信度最高的预测框开始,依次遍历每个预测框,判断该预测框与后面所有预测框之间的IOU值是否大于一定的阈值(一般为0.5或0.6)。

如果IOU值大于阈值,则将该预测框从候选框列表中剔除,否则保留该预测框。

继续遍历下一个预测框,重复上述步骤,直到所有预测框都被遍历一遍。

最终,保留下来的预测框就是经过NMS处理后的结果,即每个物体只对应一个预测框。

NMS算法的核心是通过比较重复预测框之间的IOU值,去除冗余的预测框,保留最优的结果。在YOLOv5中,NMS可以避免同一个物体被重复检测的问题,提高了检测的精度和效率。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

yolo网络整理-网络结构原理与anchor 的相关文章

  • 冬日路亚,寒冬中的收获【钓鱼博客】12.17日

    12月17日 南京 桦树钓场 晴 气温 零下4度到0度 虽屋外寒风刺骨 但钓鱼佬实在是压不住心里想钓鱼的冲动 我还是出发了 才抛几竿 出线孔和鱼竿导线孔结冰 以上阿尔法渔轮的导线规由于线上有水导致结冰冻上了 中鱼出线视频 轮子咔咔出线 渔获

随机推荐

  • 黑马程序员《PHP基础案例教程》第2版课后练习—第03章

    第3章课后练习 答案均参考教材官方发布的PPT 以下是下载PPT的页面 人民邮电出版社教育社区 PHP基础案例教程 第2版 图书 人邮教育社区 一 填空题 1 定义函数使用的关键字为 function 2 用于对字符串中的某些字符进行替换操
  • 密码学上的经典瞬间:如果当时有Python

    提到 安全 首先想到的一定是加密 在如今的互联网环境中 信息加密无处不在 我们早已习惯 甚至毫无感觉 比如 通过https协议访问的各个网站的内容 QQ 微信等聊天工具之间互相发送的信息等等 都是经过加密处理的 前几天看了一篇介绍密码学历史
  • Linux CentOS7安装harbor

    1 下载harbor离线包 wget https github com goharbor harbor releases download v2 4 2 harbor offline installer v2 4 2 tgz 2 解压安装
  • Fortinet在“IDC MarketScape: 中国软件定义广域网基础设施2023年厂商”评估中位居“领导者”类别

    近日 IDC MarketScape 中国软件定义广域网基础设施2023年厂商评估 正式发布 该报告通过 IDC MarketScape 厂商评估模型对中国SD WAN基础设施厂商进行了评估 Fortinet 在该报告中位居 领导者 类别
  • 常见的6种软件测试用例设计方法

    常见的软件测试用例设计方法 个人认为主要是下面这6种 流程图法 也叫场景法 等价类划分法 边界值分析 判定表 正交法 错误推测法 这6种常见方法中 我分别按照定义 应用场景 使用步骤 案例讲解这4个部分进行讲解 所以本文行文结构如下 每种用
  • 【正式服部署】安装Nginx

    正式服部署 安装Nginx 千寻简笔记介绍 千寻简文库已开源 Gitee与GitHub搜索 chihiro doc 包含笔记源文件 md 以及PDF版本方便阅读 文库采用精美主题 阅读体验更佳 如果文章对你有帮助请帮我点一个 Star 更新
  • 系列十一、索引

    一 索引 1 1 概述 索引 index 是帮助 MySQL 高效获取数据的有序数据结构 在数据之外 数据库系统还维护着满足特定查找算法的数据结构 这些数据结构以某种方式引用 指向 数据 这样就可以在这些数据结构上实现高级查找算法 这种数据
  • 智慧养老:创新科技让老年生活更美好

    智慧养老 创新科技让老年生活更美好 随着人口老龄化的加剧 智慧养老成为了关注焦点 智慧养老以创新科技为核心 旨在改善老年人的生活品质 促进健康 增强安全感和社会融入感 本文将详细介绍智慧养老的关键技术和应用场景 带您了解智慧养老的发展趋势和
  • UI 易用性测试 以及自动化实现!

    GUI 是指图形用户界面 UI 是指用户界面 对于纯软件系统 这两者没有本质的区别 GUI易用性测试与 UI 易用性测试内容一致 但是如果测试的对象是一个产品 这两者则存在区别 对于产品 UI 则不仅仅包括 GUI 还包括产品硬件部分的测试
  • 华为认证 | 专科考HCIE有用吗?

    当然可以 HCIE认证 对考生的学历 专业等没有任何要求 考生可以直接进行考试的报名 考试报名可以通过Pearson VUE官网 或者是直接前往考试中心所在地 向工作人员直接申请考试报名 01 专科考HCIE真的很有用吗 华为认证被越来越多
  • JAVA四大权限修饰符

    1 四大权限修饰符 public private default protected是java的四大修饰符 下面分别主要介绍四者之间的区别 1 1 public 公共的 public是权限最大的修饰符 他可以修饰类 成员变量 成员方法 构造
  • 通过全流量分析Web业务性能好坏

    随着全球商业环境的不断发展和变化 业务性能的重要性愈发凸显 无论是传统实体企业还是纯线上企业 业务性能都是其核心竞争力和稳定运营的关键要素 良好的业务性能不仅可以提升客户满意度 增加市场份额 还可以降低成本 提高效率 本文章目的为探讨基于B
  • 不做数据采集,不碰行业应用,专注数字孪生PaaS平台,飞渡科技三轮融资成功秘诀

    12月15日 飞渡科技在北京举行2023年度投资人媒体见面会 全面分享其产品技术理念与融资之路 北京大兴经开区党委书记 管委会主任常学智 大兴经开区副总经理梁萌 北京和聚百川投资管理有限公司 以下简称 和聚百川 投资总监严玉婷 北京天穆私募
  • 【Proteus仿真】【Arduino单片机】定时智能插座开关

    文章目录 一 功能简介 二 软件设计 三 实验现象 联系作者 一 功能简介 本项目使用Proteus8仿真Arduino单片机控制器 使LCD1602液晶 DS18B20温度传感器 按键 蜂鸣器 继电器开关 HC05蓝牙模块等 主要功能 系
  • 【精选】ATK&CK红队评估实战靶场三(超详细思路过程)

    博主介绍 博主介绍 大家好 我是 hacker routing 很高兴认识大家 主攻领域 渗透领域 应急响应 ATK CK红队评估实战靶场 VulnHub靶场复现 面试分析 点赞 评论 收藏 养成习惯 一键三连 欢迎关注 一起学习 一起讨论
  • 探索反思写作中Prompt的益处

    探索反思写作是一种有益于个人成长和思考的活动 它可以帮助我们深入思考自己的经历 情感和想法 并从中获得新的见解和启示 在探索反思写作中 Prompt 提示语 起着重要的作用 本文将介绍探索反思写作中Prompt的概念 作用以及如何利用它来提
  • 堡垒机是什么?有什么作用?

    随着互联网的快速发展 网络安全问题日益凸显 为了保护网络和数据的安全 堡垒机作为一种先进的安全防护技术应运而生 堡垒机提供多云主机资产的运维审计功能 覆盖SSH RDP VNC Telnet FTP SFTP等多种协议 同时支持通过浏览器W
  • 1796. 字符串中第二大的数字

    1796 字符串中第二大的数字 java class Solution public int secondHighest String s int max 1 for char ch s toCharArray if Character i
  • 几个Python小案例,爱上Python编程!

    Python是一种面向对象的解释型编程语言 源代码与解释器CPython遵守GPL协议 Python语法简洁清晰 语法简洁清晰 那么我们用少量的Python代码能做哪些有趣的东西 一 画爱心表白 1 图形都是由一系列的点 X Y 构成的曲线
  • yolo网络整理-网络结构原理与anchor

    YOLOv5 是Glenn Jocher等人操刀研发 Ultralytics公司的开源项目 项目地址可点击 2020年6月发布以来 Ultralytics公司一直在对项目进行维护与更新 目前repo的star数目突破44k YOLOv5的功