Yolo算法检测之Anchor Boxes原理详解

news/2024/10/31 3:22:19/

        刚开始yolo系列的目标检测算法,在一个网格中只能检测一个对象,但是我们在实验中发现,一个网格中很多时候存在不仅一个目标,可能存在多个目标,类似如下图所示,下面中间的网格中就存在人和车辆两个目标的中心点,因此如何检测出一个网格中存在的多个目标就成了我们需要研究的问题。Anchor Boxes的出现帮我们解决了这个问题。

 对于如上图的情况我们输出向量的时候C1 C2 C3种类这块没法输出,因为里面有两个,人和车。

 因此 Anchor Boxes的做法是我们建立两个Anchor Box,如下图所示:

 当然目标更多的时候,你也可以建立更多,我们这里为了方便讲解,只构建两个,同时因为左边的那个更适合我们图片上的人的形状,因此左边的anchor box用来检测人,右边更适合汽车的形状,因此右边的anchor box用来检测汽车。(具体这个anchor box跟目标的适配过程是根据交并比的计算决定的,那个对象跟相应的anchor box的交并比更高就使用那个)。然后针对我们之前的输出向量只能表示一个目标,而导致检测不准确的情况,我们可以将两个向量堆叠到一起。如下图所示:

完成的Anchor Box输出过程:

在使用anchor box之前,3*3的网格,每个网格输出一个向量(即检测一个目标),每个向量有8个参数(这是因为我们设置的有3个对象,所以每个向量都是8维),即使一共要输出3*3*8个参数。

上述向量参数分别为 Pc:网格里是否存在目标对象,存在为1,不存在为0

bx为目标中心点的横坐标,by为目标中心点的纵坐标,bh为相对网格的纵向偏移程度,bw为横向偏移程度。

C1为行人 、C2为车辆、C3为摩托。

y = (Pc、bx、by、bw、bh、C1、C2、C3

两个目标的y = (Pc、bx、by、bw、bh、C1、C2、C3,Pc、bx、by、bw、bh、C1、C2、C3)

如上所讲的那样,如果一个网格里有两个目标了,那输出即为3*3*16,或者也为3*3*2*8。

当然这个2就是代表目标的个数,这说明如果一个网格里存在的目标更多,那你输出向量的维度则会更大。

 向量的上半部分是行人,下半部分是汽车。只有汽车没有行人的向量如下所示:

总结:

     有的同学可能想问,那如果一个网格中存在的的目标数量大于两个呢,甚至更多呢,那我们要预设更多的anchor box吗?答案是否定的。事实上当我们按照19*19,或者30*30或者更大更密集划分网格的时候,一个网格中存在多个目标的可能性已经变得非常小,因此这种情况出现的概率非常低,因此这个问题并不会过于影响我们算法的性能。

    一般来说需要人工根据自己目标的形状特性,手动设置5个左右的anchor box,比如说,我知道我要检测的目标里面存在瘦高的目标我就设置瘦高的长方形的anchor box,我要检测目标里面有胖的目标,我就设置矮宽的正方形等等。但是人工设置总归不是最好的办法,在后面的yolo算法中我们将会学习到,K-means方法,使用K聚类的方法,我们可以自适应的选择最合适的anchor box,这才是更智能更好的方法。

 


http://www.ppmy.cn/news/1082.html

相关文章

十一、【React-Router6】Hooks 汇总

文章目录 1.useRoutes() 2. useNavigate() 3. useParams() 4. useSearchParams() 5. useLocation() 6. useMatch() 7. useInRouterContext() 8. useNavigationType() 9. useOutlet() 10. useResolvedPath() 1、useRoutes() 根据路由表&#xff0c;动态创建 <Routes> 和…

switch case与while语句练习

switch case 选择 假设用1&#xff0c;2。。。。7分别表示星期一。。。。星期天&#xff0c;现输入一个数字&#xff0c;输出对应的星期几。比如&#xff1a;输入3&#xff0c;则输出“星期三” #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() {int d…

基于HFSS的线阵综合分析

摘要&#xff1a; 常规的阵列天线方向图综合是基于阵因子分析法&#xff0c;且不考虑单元之间电磁耦合的一种快速分析手段。本次推文则简单阐述一个基于HFSS的线阵综合实例。 HFSS中的直线阵 均匀直线阵的基础知识已在前面的推文中进行了多次阐述举例&#xff0c;这里就不赘…

第五周 丹巴晨景——跟随光线,渲染照片氛围

目录5.1 尽可能的运用光线&#xff0c;晨景与星空5.2 不同光线的造型特点5.3 色彩的魅力课件光线作业5.1 尽可能的运用光线&#xff0c;晨景与星空 甘孜州 折多山垭口 新都桥镇 塔公草原 藏寨 中国最美丽的乡村——丹巴(四川省) 光影比较明显的地方 暗&#xff0c;则延长曝光时…

matlab测量计算信号的相似度

本示例说明如何测量信号相似度。最近我们被客户要求撰写关于计算信号的相似度的研究报告&#xff0c;包括一些图形和统计输出。 将回答以下问题&#xff1a;如何比较具有不同长度或不同采样率的信号&#xff1f;如何确定测量中是否存在信号或仅有噪声&#xff1f;有两个信号…

嵌入式 ADC使用手册完整版 (188977万字)(附源码详细篇)

嵌入式 ADC使用手册完整版 &#xff08;188977万字&#xff09;&#x1f49c;&#xff08;附源码详细篇&#xff09;&#x1f49c;【1】ADC简介【2】ADC主要特征【3】ADC引脚和内部信号【4】ADC 模块框图【5】ADC校准&#xff08;CLB&#xff09;【6】ADC 时钟【7】ADCON 开关【…

VUE+Spring Boot前后端分离开发实战(一):基于SpringBoot+Mybatis-plus+JWT+shiro+mysql后端登录接口实现

文章目录 前言前端后端相关依赖数据库设计编码实现项目结构整合Mybatis整合shiro+JWT定义相关类token工具类jwt 相关类和shiro相关shiro配置类实现登录postMan测试接口说明前言 本专栏技术栈: 前端 vueelement UIvuexaxiosrouter后端 sprin

MySQL8高级

MySQL8高级 一、Linux下MySQL的安装与使用 1、版本说明 MySQL Community Server 社区版本&#xff0c;开源免费&#xff0c;自由下载&#xff0c;但不提供官方技术支持&#xff0c;适用于大多数普通用户。MySQL Enterprise Edition 企业版本&#xff0c;需付费&#xff0c;不能…