yolov7 训练自己的数据集之前先手动计算锚定框

./utils/autoanchor.py中的

def check_anchors(dataset, model, thr=10.0, imgsz=640):

函数的thr参数是指 数据集中标注框宽高比最大阈值,默认的是4.0。 由于火灾数据集中的火灾由呈现一片连续的状态,因此标注的宽高比阈值应当设置的大一些。

首先可以首先可以自行编写一个程序,统计一下你所训练的数据集所有标签框宽高比,看下宽高比主要分布在哪个范围、最大宽高比是多少? 比如:你使用的数据集中目标宽高比最大达到了 5:1(甚至 10:1) ,那肯定需要重新计算锚定框了,针对 coco 数据集的最大宽高比是 4:1 。

新建Python文件Calculates_anchor_frame_ratio.py,手动计算锚定框。可以多运行几次试一试,每次的结果都会有些区别。

import utils.autoanchor as autoAC

# 对数据集重新计算 anchors
new_anchors = autoAC.kmean_anchors('./data/fire.yaml', 9, 640, 10.0, 1000, True)
print(new_anchors)

'''
    kmean_anchor()函数参数含义:
        path:包含数据集文件路径等相关信息的 yaml 文件(比如 coco128.yaml), 或者 数据集张量(yolov5 自动计算锚定框时就是用的这种方式,先把数据集标签信息读取再处理)
        n:锚定框的数量,即有几组;默认值是 9
        img_size:图像尺寸。计算数据集样本标签框的宽高比时,是需要缩放到 img_size 大小后再计算的;默认值是 640
        thr:数据集中标注框宽高比最大阈值,默认是使用 超参文件 hyp.scratch.yaml 中的 “anchor_t” 参数值;默认值是 4.0;自动计算时,会自动根据你所使用的数据集,来计算合适的阈值。
        gen:kmean 聚类算法迭代次数,默认值是 1000
        verbose:是否打印输出所有计算结果,默认值是 true

'''

thr=5.0 的时候bpr=0.9980

new_anchors = autoAC.kmean_anchors('./data/fire.yaml', 9, 640, 5.0, 1000, True)​​​​​

输出部分结果如下:

autoanchor: Evolving anchors with Genetic Algorithm: fitness = 0.7804: 100%|██████████| 1000/1000 [00:00<00:00, 5714.26it/s]

autoanchor: thr=0.20: 0.9980 best possible recall, 6.39 anchors past thr

autoanchor: n=9, img_size=640, metric_all=0.377/0.781-mean/best, past_thr=0.477-mean: 24,30,  55,33,  36,61,  112,80,  92,122,  168,110,  187,193,  280,167,  310,301

[[     23.817      30.341]

 [     55.273      33.362]

 [     35.716      61.354]

 [      111.5      80.082]

 [     91.683      122.09]

 [        168       110.4]

 [     186.52      193.02]

 [     279.83      167.17]

 [     310.29      300.89]]

因为我做的是火灾检测,会有一大片连续的火灾,因此我会把 thr设置的大一些,以备计算出更符合火灾检测的锚框。 

当我把参数thr设置为10.0的时候 bpr=1.0000

autoanchor: Evolving anchors with Genetic Algorithm: fitness = 0.7673: 100%|██████████| 1000/1000 [00:00<00:00, 5649.72it/s]

autoanchor: thr=0.10: 1.0000 best possible recall, 8.20 anchors past thr

autoanchor: n=9, img_size=640, metric_all=0.368/0.767-mean/best, past_thr=0.397-mean: 26,28,  37,55,  102,62,  78,111,  169,107,  167,182,  254,169,  330,204,  306,339

[[     25.524      28.062]

 [     36.765          55]

 [     101.96      61.546]

 [     77.876      111.24]

 [     169.04      106.65]

 [     168.15      182.63]

 [      254.3      168.58]

 [     329.94      204.82]

 [     307.08      338.76]]

最后就可以把输出的9组锚框,替换到自己的yaml文件中,就可以开始训练了。

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值