anchors如何获得_Yolov3通过k-means聚类得到自己数据的anchors

article/2025/11/5 16:27:22

本文代码参考:

https://github.com/lars76/kmeans-anchor-boxes

Yolov3中默认的9个anchors是作者通过对voc数据聚类得到的。

anchors = 10,14, 23,27, 37,58, 81,82, 135,169, 344,319

不过,当我们训练自己的数据时,如果也采用默认的anchors,可能就不太适合了,

这里我们需要对自己的数据重新做聚类,得到适合自己数据的anchors。

本文聚类的数据是VOC2012里面的person类别数据,关于数据抽取,可以参考我上一篇博客:

https://blog.csdn.net/c2250645962/article/details/104840953

代码如下:

import glob

import xml.etree.ElementTree as ET

import numpy as np

from kmeans import kmeans, avg_iou

ANNOTATIONS_PATH = "./VOCPerson/Annotations"

CLUSTERS = 9

def load_dataset(path):

dataset = []

for xml_file in glob.glob("{}/*xml".format(path)):

# print(xml_file)

tree = ET.parse(xml_file)

height = int(tree.findtext("./size/height"))

width = int(tree.findtext("./size/width"))

for obj in tree.iter("object"):

xmin = int(float(obj.findtext("bndbox/xmin"))) / width

ymin = int(float(obj.findtext("bndbox/ymin"))) / height

xmax = int(float(obj.findtext("bndbox/xmax"))) / width

ymax = int(float(obj.findtext("bndbox/ymax"))) / height

dataset.append([xmax - xmin, ymax - ymin])

return np.array(dataset)

data = load_dataset(ANNOTATIONS_PATH)

print('data shape is {}'.format(data.shape))

out = kmeans(data, k=CLUSTERS)

yolov3clusters = [[10,13],[16,30],[33,23],[30,61],[62,45],[59,119],[116,90],[156,198],[373,326]]

yolov3out= np.array(yolov3clusters)/416.0

print("self data Accuracy: {:.2f}%".format(avg_iou(data, out) * 100))

print("yolov3 Accuracy: {:.2f}%".format(avg_iou(data, yolov3out) * 100))

# 生成resize到416对应的anchor

print("Boxes:\n {}-{}".format(out[:, 0]*416, out[:, 1]*416))

# print("Boxes:\n {}".format(out))

ratios = np.around(out[:, 0] / out[:, 1], decimals=2).tolist()

print("Ratios:\n {}".format(sorted(ratios)))

注意代码中的

yolov3clusters = [[10,13],[16,30],[33,23],[30,61],[62,45],[59,119],[116,90],[156,198],[373,326]]

yolov3out= np.array(yolov3clusters)/416.0

这两行是拿yolov3默认的9个anchors出来,为了后面跟自己聚类得到的anchors做计算avg_iou比较。

只需要改变ANNOTATIONS_PATH = "./VOCPerson/Annotations"为自己数据的标注文件路径即可。

我这里的标注文件如下图:

1b4d9b23ad077183077af3f3a6043969.png

运行结果如下:

data shape is (14470, 2)

self data Accuracy: 71.85%

yolov3 Accuracy: 60.80%

Boxes:

[ 24.128 12.48 92.352 213.824 107.328 42.432 143.104 342.784 58.24 ]-[ 61.01333333 29.952 270.67733333 332.8 159.744

108.71466667 289.536 382.13953488 193.63363363]

Ratios:

[0.3, 0.34, 0.39, 0.4, 0.42, 0.49, 0.64, 0.67, 0.9]

由结果可以看出,使用yolov3默认的9个anchors计算得到的平均iou是60.80%,

而自己聚类得到的9个anchors计算得到的平均iou是71.85%。

9个anchor取整分别是(24,61),(13,30),(92,271),(214,333),(107,160),(42,108),(143,290),(343,382),(58,193)

对他们排序,然后得到用于替换原来默认anchors如下:

anchors = 13,30, 24,61, 42,108, 58,193, 92,271, 107,160, 143,290, 214,333, 343,382

那么,使用自己聚类得到的anchors去训练效果应该会更好。

将聚类得到的9个anchors,按照大小排列替代yolov3的cfg文件中的9个anchors即可。


http://chatgpt.dhexx.cn/article/loNonb7X.shtml

相关文章

Unity 锚点 Anchors

锚点介绍 锚点是Rect Transform组件中的属性,用于描述当前物体相对于父物体的对齐方式。 选中一个UI元素,就会显示其父物体的矩形框以及相对于父物体的锚点。 锚点只能位于父物体的矩形框之内。 锚点表现为四个相对出现的小三角形, 它们时而…

QML anchors 锚布局

锚布局 锚布局有7种锚线 anchors.leftanchors.rightanchors.topanchors.bottomanchors.horizontalCenteranchors.verticalCenteranchors.baseline 5种锚边距 anchors.leftMarginanchors.rightMarginanchors.topMarginanchors.bottomMarginanchors.margins 3种锚偏移 anchor…

anchors生成

关于修改anchor anchor与图片的输入分辨率有关系。 You should use this repository to get anchors: https://github.com/AlexeyAB/darknet By using this command for Yolo v3 (or v2): ./darknet detector calc_anchors data/hand.data -num_of_clusters 9 -width 720 -he…

使用k-means聚类anchors

在之前讲yolo理论基础知识时有提到过,从yolov2开始使用的anchors都是通过聚类得到的。如果想了解更多yolo相关的知识可以看看我在bilibili上录得视频:https://www.bilibili.com/video/BV1yi4y1g7ro 今天补下之前没有细讲的聚类anchors相关知识&#xff…

细说物体检测中的Anchors

点击上方“AI公园”,关注公众号,选择加“星标“或“置顶” 作者:Raghul Asokan 编译:ronghuaiyang 导读 给大家再次解释一下Anchors在物体检测中的作用。 今天,我将讨论在物体检测器中引入的一个优雅的概念 —— Ancho…

带图讲解,深度学习YOLO里面的anchors的进阶理解

如果有了解过yolo网络,那肯定也听说过anchors,当然anchors这个概念布置在YOLO里面才有,在其他的目标检测中也存在anchors这个概念。对于anchors计算的一些公式这篇文章就不进行讲解了,这篇文章主要是讲在训练网络模型过程中anchor…

Linux终端的网易云音乐——musicbox

网易云音乐是听歌的不错的选择,如果能够在命令行听歌就更cool了。特来推荐musicbox。 网易云音乐的musicbox是网易云音乐命令行版本,这款命令行的客户端使用 Python 构建,以 mpg123 作为播放后端。提供了很多使用的功能,如&#x…

MusicStore-2

1.按照MusicStore-1步骤创建mvc项目,并初始化数据库 2.修改HomeController using Chapter8.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc;namespace Chapter8.Controllers {public class…

音乐i网站

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字) :

musicbox(暂停/启动,停止,下一曲上一首)

主界面 按下开始 按下暂停 按下停止 下一首 上一首 代码 activity_main.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:orientation"vertical&…

node-webkit-MusicBox 基于nwjs ,html5 ,制作的音乐盒子

太长&#xff1f;单击目录直接去看最终效果&#xff0c;在最下边 文件下载地址&#xff1a;http://download.csdn.net/detail/u013934914/9180053 1.思路&#xff08;简单设想&#xff09; index.html 实现 对页面的显示&#xff0c;并调用绑定ymusic.js中的方法 需要&…

算数计算机音乐模拟器,Musicalculator

musicalculatorapp它是一个音乐旋律软件&#xff0c;在这上面你可以随时随地的记录你有灵感时创作出来的乐谱&#xff0c;还可以放好听的音色包进行自动的弹奏&#xff0c;还可以根据自己的想法设定速度音长&#xff0c;这一款非常的适合喜爱音乐的用户。该应用只是一款音乐计算…

HTML5 CSS3实战——自定义音乐播放器(一)

前几天才刚开始接触HTML5和CSS3。学习了一下里面的一些炫酷的新特性。不过&#xff0c;对于原生的HTML5的媒体播放器&#xff0c;真的不得不吐槽&#xff1a;就三个按钮 界面还那么丑。所以觉得自己整一个好看的播放器。老话说&#xff1a;说不如干&#xff0c;纸上谈兵终觉浅。…

NetEase MusicBox —— Linux系统里的网易云音乐(转载)

功能特性 320kbps的高品质音乐 歌曲&#xff0c;艺术家&#xff0c;专辑检索 网易 22 个歌曲排行榜 网易新碟推荐 网易精选歌单 网易 DJ 节目 私人歌单&#xff0c;每日推荐 随心打碟 本地收藏&#xff0c;随时加 ? 播放进度及播放模式显示 Vimer 式快捷键让操作丝般顺滑 可使…

MusicBox - 仿千千静听

大学毕业时业余之作 最新下载地址&#xff1a; 匿名提取文件连接 http://pickup.mofile.com/5412819180446197 或登录Mofile&#xff0c;使用提取码 5412819180446197 提取文件 MusicBox 停止开发&#xff01;&#xff01; 淘宝开卖源代码 有意者 http://item.taobao.co…

音乐播放器

用HTML做了个音乐播放器&#xff0c;可以循环播放&#xff0c;选择歌曲&#xff0c;以及自动播放下一首&#xff0c;运用了js和json知识&#xff0c;下面是效果图和源码&#xff0c;有兴趣的可以试试哦 效果图&#xff1a; 源码&#xff1a;html <span style"color:#9…

MusicPlay播放器

文章目录 一丶前端布局二丶Activity三丶Service实验演示 一丶前端布局 Layout的框架 一个自定义的音乐播放器&#xff0c;页面布局大致如下 二丶Activity 首先定义控件 // 获取界面中显示歌曲标题、作者文本框TextView title, author;// 喜欢&#xff0c;播放&#xff0c;暂…

MusicPlay 音乐播放器(纯前端)

纯Css,js前端音乐播放器,界面UI比较好。我特别喜欢,适合二次开发,调用了网易云第三方接口以及将歌曲链接导出可以访问的歌曲链接,实现了异步歌曲搜索播放,以及异步显示歌词等.结合html5 新特性实现歌曲暂停,下一首,快进等等.为大二前端练手项目.采用渐变质背景 是前端练手的好…

HTML5+JS实现简易的音乐播放器

HTML5JS实现简易的音乐播放器 播放器实现的功能 播放/暂停音乐切换歌曲&#xff0c;上/下一首歌音量最大或静音音乐播放时间实时变化进度条拖拽歌曲图片切换 播放器效果展示 代码展示 html <div class"musicBox" id"musicBox"><audio src"…

音乐播放器MusicBox

音乐播放器MusicBox 功能界面分析 界面要求较为简洁&#xff0c;仅需两个TextView&#xff0c;用于输出音乐名称及歌手姓名&#xff0c;下方三个ImageButton&#xff0c;用于播放&#xff0c;暂停或切换上一首&#xff0c;下一首歌曲。 实现 总体规划 在MainActivity中&a…