【目标检测】Anchor-based模型:基于K-means算法获取自制数据集的Anchor(yolo源码)

本文介绍了Anchor在目标检测模型中的作用,重点讨论了如何通过K-means聚类算法自动生成适合数据集的Anchor,以及如何利用遗传算法更新Anchor以提高模型性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Anchor-based目标检测模型中,根据数据集选择合适的Anchor有利于加快模型的收敛速度以及减少模型的边框预测误差。本篇文章首先介绍Anchor在目标检测模型中的作用;然后介绍K-means聚类算法;最后介绍yolo源码自制数据集的Anchor的获取方法。

1 Anchor的理解

  在Anchor-based目标检测模型中(SSD,YOLO v3/v4/v5等),其通过预先设定的具有不同宽高比尺度的Anchor得到目标的粗略边框,并训练回归参数对Anchor进行修正以得到目标的准确边框。以YOLOv5为例,其基于Anchor的检测流程如图1所示,在不同尺度的输出特征图使用不同尺度的Anchor实现对不同大小目标的检测,在一个检测单元中,使用不同宽高比的Anchor对目标进行预测。

  • 在较大的特征图上使用较小的Anchor,实现对小目标的检测;
  • 在中等的特征图上使用中等的Anchor,实现对中等大小目标的检测;
  • 在较小的特征图上使用较大的Anchor,实现对大目标的检测;

在这里插入图片描述

图1 Anchor设定方法

  在目标检测模型中,目标的类别预测结果不会随着其在图像中位置的改变而改变;但目标的边框信息会随着其在图像中位置的改变而改变,通过设定Anchor,实现目标边框对Anchor的偏移量预测,该偏移量不会随着目标在图像中位置的改变而改变,更有利于模型的回归,符合神经网络位移不变性
  模型在训练中,根据Anchor和目标实际边框之间的IoU大小,分配用于检测该目标的Anchor。根据数据集科学的设置Anchor有利于加快模型训练时的收敛速度减少模型对目标的漏检率

2 K-means聚类算法

  K-means是最常见的聚类算法,算法接受未标记的数据集,然后将数据聚集成不同的组,其方法如下:

  1. 首先选取K个随机的点,作为聚类中心;
  2. 对于数据集中的每一个数据,计算其与聚类中心点的距离,并将其与距离最近的中心点关联起来,与同一个中心点关联的所有点聚成一类;
  3. 计算每一类的平均值,将该类的中心点移动到平均值的位置;
  4. 重复步骤2-3,直到中心点不再改变。
    在这里插入图片描述
图2 K-means分类示例

3 基于K-means获取自制数据集Anchor

Anchors获取

基于Scipy库中的kmeans函数计算K-means聚类(kmean_anchors)

  • 输入:shapes(原图大小),labels(图像标签),n(聚类中心点个数),img_size(模型训练图像大小)
  • 输出:anchors(在模型训练图像上的绝对大小)
def kmean_anchors(shapes, labels, n=9, img_size=640):
	'''
	shapes: 数据集图像大小
	labels: 数据集标签 [N, 5] 5->(cls, x, y, w, h)(相对大小) 
	n: Anchors数量(在img_size上绝对大小)
	img_sie:模型训练图像大小
	'''
	from scipy.cluster.vq import kmeans # 导入kmeans函数, 返回-> k:Anchors; distortion:每一类内点到中心点的平均距离
	
	# 数据集图像输入模型的大小(保持原图比例, 长边缩放为img_size)
	shapes = img_size * shapes / shapes.max(1, keepdims=True)
	# 得到所有目标的边框(在输入图像上绝对大小)
	wh0 = np.concatenate([l[:, 3:5] * s for s, l in zip(shapes, labels)]) 
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

初初初夏_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值