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. mod_python

    mod_python的确是一个让python程序员能够apache2写一些网站的工具.它是一个接口.过去一些python写的整站系统需要通过mod_python作为连接枢纽,将apache2与它们连接 ...

  2. windows 2003 server 64 位 IIS 6下部署 32位网站

    在 C:\WINDOWS\system32\inetsrv\MetaBase.xml 设置节点 在 开始--->运行--->输入一下代码,回车即可,就会跳出正在安装NET2.0 代码为   ...

  3. 开源ORM

    Farseer.net轻量级开源框架 目录 https://github.com/steden/Farseer.net ---------------------------------- SunSo ...

  4. Excel:一列是源值随机加减某随机值,变为另一列的数值

    1) 产生x1与x2之间整数随机数 =RANDBETWEEN(x1,x2),x1和x2为随机数区间 如果需要小数,可以乘以小数获得,Eg: =RANDBETWEEN(-5,5)*0.01,表示 -0. ...

  5. bzoj 2456: mode【瞎搞】

    这题加个#include都会MLE-- 神思路,每个数抵消宇哥和它不同的数,最后剩下的就是众数 #include<cstdio> int n,la,x,tot; int main() { ...

  6. 组合数的几种球阀 By cellur925

    先来了解几个概念:排列数,组合数. 一.定义及有用的性质 排列数:从n个不同元素中依次取出m个元素排成一列的方案数.P(n,m)=n!/(n-m)! 组合数:从n个不同元素中依次取出m个元素形成一个集 ...

  7. tableView 顶部多出一部分解决方法

    1.self.automaticallyAdjustsScrollViewInsets = NO; 此方法解决之后 不能保证tableView 能彻底的滑动到底部 2. self.edgesForEx ...

  8. 【BZOJ3514】Codechef MARCH14 GERALD07加强版(LCT_主席树)

    题目: BZOJ3514 分析: 看到这题真的是一脸懵逼无从下手,只好膜题解.看到「森林的联通块数 = 点数 - 边数」这一句话就立刻什么都会了 QAQ . 这题最重要的就是意识到上面那个式子(正确性 ...

  9. Linux oraenv Tips

    Linux for the Oracle DBA -Customizing the Oracle User's Environment There are many ways to customize ...

  10. AJPFX分析int 和integer的区别

    int是java提供的8种原始数据类型之一.Java为每个原始类型提供了封装类,Integer是java为int提供的封装类.int的默认值为0,而Integer的默认值为null,即Integer可 ...