yolo训练自己数据集anchors的选择

项目场景:

在训练yolo网络检测目标时,需要根据待检测目标的位置大小分布情况对anchor进行调整,使其检测效果尽可能提高。我们这时候不能直接使用COCO的anchors,自己可以重新聚类9组anchors。


问题描述:

Yolo为了训练COCO数据集准备了三组anchors,其对COCO数据集的检测有了提升。
./models/yolo.yaml

anchors:
  #- [5,6, 7,9, 12,10]      # P2/4
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32

如果训练自己的数据集,自己的数据量没有coco数据集那么多,且数据信息没有那么丰富,并且anchor大小尺寸的分布不如coco数据集那样规律,比如:小目标检测,多目标检测。建议根据自己的数据集去聚类一份新的适合自己数据集的anchors。
./utils/autoanchor.py/kmean_anchors

def kmean_anchors(path='./data/coco.yaml', n=9, img_size=640, thr=4.0, gen=1000, verbose=True):

按照coco.yaml新建配置一个“目标.yaml”文件,里面设置好训练集路径;n=9,表示聚类9个点,这个不要改,img_size训练集图像大小,thr训练集目标长宽比例,可根据自己的待检测目标进行调整。


解决方案:

调整完成之后运行autoanchor.py发现并无输出,其原因是直接写入了模块,并没有显示出来。

在这里插入图片描述

我们可以打断点将其debug出来,打开./models/yolo.py找到其m.anchors,对其进行断点标注,然后debug yolo.py,步入cutoanchor.py文件,在调试器找到autoanchor.py,在变量中找到m的参数,其
anchor_grid为作者为COCO数据集设置的anchors。
在这里插入图片描述
然后data中的变量为聚类自己数据集的anchors。
在这里插入图片描述将其保存替换yolo.yaml文件中的anchors。

anchors:
#  - [5,6, 7,9, 12,10]      # P2/4
#  - [10,13, 16,30, 33,23]  # P3/8
#  - [30,61, 62,45, 59,119]  # P4/16
  #- [116,90, 156,198, 373,326]  # P5/32
  - [ 1.25000,  1.62500,2.00000,  3.75000,4.12500,  2.87500]
  - [ 1.87500,  3.81250,3.87500,  2.81250,3.68750,  7.43750]
  - [ 3.62500,  2.81250,4.87500,  6.18750,11.65625, 10.18750]

然后继续训练即可。

版权声明:本文为CSDN博主「七月&安生」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43637851/article/details/121277162

七月&安生

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐