zoukankan      html  css  js  c++  java
  • anchor box聚类

    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

  • 相关阅读:
    线程的实现方式
    实现一个拷贝文件的工具类,要使用字符流还是字节流
    String&&StringBuilder&&StringBuffer
    面向对象的特征
    索引的选择
    TCP之Nagle算法&&延迟ACK
    通用套接字选项和TCP套接字选项
    TCP之非阻塞connect和accept
    TCP之种种连接异常
    TCP之listen&backlog
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/7637537.html
Copyright © 2011-2022 走看看