浅谈yolov5中的anchor

news/2024/7/11 0:00:08 标签: YOLO, 人工智能

默认锚框

在这里插入图片描述

YOLOv5的锚框设定是针对COCO数据集中大部分物体来拟定的,其中图像尺寸都是640×640的情况。

anchors参数共3行:

第一行是在最大的特征图上的锚框

第二行是在中间的特征图上的锚框

第三行是在最小的特征图上的锚框

在目标检测中,一般希望在大的特征图上去检测小目标,因此锚框设定较小。一般希望在小的特征图上去检测大目标,因此锚框设定较大。

YOLOv5的作者发现相同类别的目标实例具有相似的gt长宽比,因此从数据集中预先准备几个几率比较大的bounding box,再以它们为基准进行预测。

思考一个问题:我们自己的数据集和COCO数据集中的物体情况相似程度如何呢?默认anchors还能否适应我们的需求呢?

很显然是不能的!

因此YOLOv5中提出了一个自适应锚框的思想,根据目标的特征图上的分布情况自适应地调整锚框的大小和尺度。

思想:传统的目标检测方法通常使用固定大小和尺度的锚框来进行目标检测,但这会导致在处理不同尺度、不同大小的目标时效果不佳。而自适应锚框的思想是在目标检测网络中引入一些机制,使得模型能够根据目标在特征图上的分布自动适应地调整锚框的大小和尺度。

  • K-means聚类算法

在无标签数据集上执行的最直接任务之一,是在数据集中找到彼此相似的数据组。

K-means存储用于定义聚类的k个质心。如果哪一个点离着哪个质心最接近,则该点被视为位于哪个聚类中。

K-means通过交替进行下面两步来找到最佳质心:

1、根据当前质心将数据点划分到某聚类中

2、根据当前数据点计算聚类的质心

在这里插入图片描述

先初始化k个质心,将各个点划分到现有的簇,然后将所有簇取平均值确定新的质心,迭代之前的操作。

在这里插入图片描述

YOLOv5锚框生成过程:

YOLOv5模型训练时,默认的做法是它会自动去计算下默认的anchors与你数据集中所有目标的best possible recall,如果小于0.98就会根据你自己数据集的目标去重新聚类生成anchors,反之使用默认的anchors。

具体来说,YOLOv5会首先根据训练集的目标框尺寸信息,选择一个K值,表示聚类的簇数。然后使用K-means或其他聚类算法对目标框的尺寸进行聚类,将相似尺寸的目标框聚到同一个簇中。每个簇的中心点就成为了一个anchor,使用这些重新聚类得到的anchors作为候选框的基准。

通过重新聚类anchor,可以更好地适应当前训练集的目标分布,提高模型的检测性能。但是训练过程中重新聚类anchor是一个耗时的操作。

kmeans_anchor函数:
在这里插入图片描述


http://www.niftyadmin.cn/n/5064637.html

相关文章

你写过的最蠢的代码是?——一起探讨编程的奇葩时刻

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页: 🐅🐾猫头虎的博客🎐《面试题大全专栏》 🦕 文章图文并茂&#x1f996…

MySQL数据库索引练习

1.学生表:Student (Sno, Sname, Ssex , Sage, Sdept) 学号,姓名,性别,年龄,所在系 Sno为主键 课程表:Course (Cno, Cname,) 课程号,课程名 Cno为主键 学生选课表:SC (Sno, Cno, Scor…

hwk4:C++ 运算符重载

用mystring实在部分C运算符重载 mystring.h: #ifndef MYSTRING_H #define MYSTRING_H#include <iostream> #include <cstring>using namespace std;class myString { private:char *str; //记录c风格的字符串int size; //记录字符串的实际长…

Cheerleaders UVA - 11806

Cheerleaders - UVA 11806 - Virtual Judge 题目大意&#xff1a;有一个n*m的网格&#xff0c;要把其中k个格子涂黑&#xff0c;且满足最上、下一行、最左、右一列分别至少有一格黑&#xff0c;问方案数有多少 2<m,n<50&#xff1b;k<500 思路&#xff1a;因为合法…

leetCode 45.跳跃游戏 II 贪心算法

45. 跳跃游戏 II - 力扣&#xff08;LeetCode&#xff09; 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 &…

解决antd vue ts v-model:value绑定Boolean布尔类型爆红但可以使用

没啥好写的&#xff0c;写点注意点把 前言&#xff1a;在 antd vue中需要用到对应的类型转换&#xff0c;v-model后面补一个value来表明类型&#xff0c;但这也是默认类型&#xff0c;并不是指定类型默认是 (property) value?: string | number | undefined 字符&#xff0c;…

Rabbitmq安装-docker版

1.简介 2.安装消息队列 下载地址https://www.rabbitmq.com/download.html 使用docker方式安装 需要先下载docker&#xff0c;参考文章https://blog.csdn.net/weixin_43917045/article/details/104747341?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22arti…

栈的应用场景(三)

最小栈 1.题目2.画图分析3.代码实现 1.题目 2.画图分析 3.代码实现 package Stack;import java.util.Stack; public class MinStack {private Stack <Integer> stack;private Stack <Integer> MinStack;public MinStack() {stack new Stack<>();MinStack …