项目场景:
在训练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
暂无评论