fast rcnn和rfcn中使用的都是默认的anchor box设置,都是9种,比例为0.5 、1、 2,大小为128、256、512。但我的数据集的gt框更小,需要找到适合我的数据集的anchor box尺寸。

yolo9000提出了用kmeans聚类算法来找到合适的anchor box尺寸。

这篇博客介绍了yolo9000是怎么实现的:http://blog.csdn.net/hrsstudy/article/details/71173305?utm_source=itdadao&utm_medium=referral。

源代码:https://github.com/PaulChongPeng/darknet/blob/master/tools/k_means_yolo.py,这个代码库里还有整个yolo9000的代码中文解释,很好,可以拿来学习。

label_path = "/raid/pengchong_data/Data/Lists/paul_train.txt"将这个改成你自己数据的地址,就可以跑这个脚本。

跑这个脚本,需要把gt框从左上右下坐标转换成中心点、宽度、高度的格式,实际上也只用到了宽度和高度。

我使用的是将原始宽度高度除以了图片的宽度高度,因为我觉得这样可以保证他们在同一个分布

如果宽度高度直接是原始的宽度高度,grid_size就设置为1;如果是相对于原图像的大小,grid_size就设置为相应比例,两个比例:960、600。

实际上,跑的过程中发现,loss只在前几个迭代期减小,后面loss就一直增大了。无论是用原始的宽高度,还是用的相对于原图像的宽高度,都出现了这种现象。最后我选择了让loss降最低的那几个坐标为最后的结果。

跑的过程中还发现,随着k值的增加,loss是在减少的,但对于单个k值,loss还是先降低后升高。

最终我选择了k为9,这与rfcn中9个anchor是对应的。

得到9个坐标分别是:(18,17)、(26,25)、(42,27)、(49,40)、(67,66)、(86,39)、(119,80)、(182,155)、(323,281)

这9个坐标表示的是9种长宽,不是中心点。因为scale,ratio最终求的就是w和h

采用了两种方式进行anchor box的改变:

1.将scals从(8,16,32)改成(1,2,4,8,16),这种得到的ap为0.8435

2.

anchors = np.vstack([_scale_enum(ratio_anchors[i, :], scales)
for i in xrange(ratio_anchors.shape[0])])

直接在这段代码后面添加anchors = 得到的那9个坐标,当然需要将9个坐标相应变换

比如(18,17)就改成(-1.5,-1,16.5,16)

这种得到的ap为0.8442

当然,修改anchor box还要改一些代码,需要修改哪些文件,直接搜索整个工程文件哪些引用了generate_anchors这个函数的就可以了

除此之外,还需要修改train、test的porotxt

可以参考这个博客:http://www.cnblogs.com/whu-zeng/p/7517480.html

anchor box聚类的更多相关文章

  1. 聚类kmeans算法在yolov3中的应用

    yolov3 kmeans yolov3在做boundingbox预测的时候,用到了anchor boxes.这个anchors的含义即最有可能的object的width,height.事先通过聚类得 ...

  2. 目标检测 1 : 目标检测中的Anchor详解

    咸鱼了半年,年底了,把这半年做的关于目标的检测的内容总结下. 本文主要有两部分: 目标检测中的边框表示 Anchor相关的问题,R-CNN,SSD,YOLO 中的anchor 目标检测中的边框表示 目 ...

  3. 【57】目标检测之Anchor Boxes

    Anchor Boxes 到目前为止,对象检测中存在的一个问题是每个格子只能检测出一个对象,如果你想让一个格子检测出多个对象,你可以这么做,就是使用anchor box这个概念. 我们还是先吃一颗栗子 ...

  4. 目标检测中的anchor-based 和anchor free

    目标检测中的anchor-based 和anchor free 1.  anchor-free 和 anchor-based 区别 深度学习目标检测通常都被建模成对一些候选区域进行分类和回归的问题.在 ...

  5. 目标检测 anchor 理解笔记

    anchor在计算机视觉中有锚点或锚框,目标检测中常出现的anchor box是锚框,表示固定的参考框. 目标检测的任务: 在哪里有东西 难点: 目标的类别不确定.数量不确定.位置不确定.尺度不确定 ...

  6. [DeeplearningAI笔记]卷积神经网络3.6-3.9交并比/非极大值抑制/Anchor boxes/YOLO算法

    4.3目标检测 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.6交并比intersection over union 交并比函数(loU)可以用来评价对象检测算法,可以被用来进一步改善对 ...

  7. Anchor Boxes示例实战

    Anchor Boxes示例实战 目标检测算法通常对输入图像中的大量区域进行采样,判断这些区域是否包含感兴趣的目标,并调整这些区域的边缘,以便更准确地预测目标的真实边界框.不同的模型可能使用不同的区域 ...

  8. 经典论文系列 | 目标检测--CornerNet & 又名 anchor boxes的缺陷

    ​ 前言: 目标检测的预测框经过了滑动窗口.selective search.RPN.anchor based等一系列生成方法的发展,到18年开始,开始流行anchor free系列,CornerNe ...

  9. paper 111:图像分类物体目标检测 from RCNN to YOLO

    参考列表 Selective Search for Object Recognition Selective Search for Object Recognition(菜菜鸟小Q的专栏) Selec ...

随机推荐

  1. DOM方式解析xml实例2

    老样子,javabean实体类: import java.io.*; public class Book implements Serializable { private int id; priva ...

  2. EF3:Entity Framework三种开发模式实现数据访问

    前言 Entity Framework支持Database First.Model First和Code Only三种开发模式,各模式的开发流程大相径庭,开发体验完全不一样.三种开发模式各有优缺点,对 ...

  3. Synchronized的使用和注意事项

    synchronized: 1.取得的锁都是对象锁,而不是把一段代码或方法(函数)当作锁: 2.多个线程访问的必须是同一个对象. 3.当一个线程执行的代码出现异常时,其所持有的锁会自动释放 4.A线程 ...

  4. AutoIT: 如何通过坐标相对位置来对无法识别的Menu以及GridView进行定位点击操作

    一般情况下,GridView中的数据来自数据库,我们通过Windows Info,是无法获取GridView中的信息的.而软件定制的Menu,很多时候无法通过系统提供的WinMenuSelectIte ...

  5. bzoj 3481 DZY loves math —— 反演+Pollard_rho分解质因数

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3481 推式子:xy % P = Q 的个数 由于 0 <= x,y < P,所以 ...

  6. 字节流与字符流简单操作(OutputStream、InputStream、Writer、Reader)

    操作流程 使用File类打开一个文件 通过字节流或者字符流的子类.指定输出的位置. 进行读/写操作 关闭输入/出 字节流与字符流 在java.io包中操作文件内容主要有两大类:字节流字符流.两大类分为 ...

  7. HDU 3944 DP? (Lucas定理)

    题意:在杨辉三角中让你从最上面到 第 n 行,第 m 列所经过的元素之和最小,只能斜向下或者直向下走. 析:很容易知道,如果 m 在n的左半部分,那么就先从 (n, m)向左,再直着向上,如果是在右半 ...

  8. 切换或者用户登录时 出现 显示 -bash-4.2$ 问题 的解决

    集群的普通用户在登录用户或者切换用户时,出现 -bash-4.2$ 的状态: [goldwind@TR-OS-DB 9.4]#su postgres bash-4.2$ 原因:在linux下通过use ...

  9. UVA - 10859 Placing Lampposts 放置街灯

    Placing Lampposts 传送门:https://vjudge.net/problem/UVA-10859 题目大意:给你一片森林,要求你在一些节点上放上灯,一个点放灯能照亮与之相连的所有的 ...

  10. ntp多台主机时间同步

    通俗的讲,多台主机ntp时间同步,就是自定义集群中一台机器(我们这里叫它server)与网络时间同步,然后其它主机与server主机时间同步 另外,ntp时间同步机制不是我们想象的那样直接同步,而是“ ...