yolov3的正负样本分配策略mmdet代码详解

这篇博客深入解析了YOLO(You Only Look Once)目标检测算法中关键步骤,包括YOLOAnchorGenerator如何生成锚点,GridAssigner如何进行正负样本分配,以及PseudoSampler和YOLOBBoxCoder的作用。通过理解这些核心组件,可以更好地掌握YOLO的工作原理和训练过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以mmdet代码为例,核心代码在YOLOANchorGenerator,GridAssigner,PseudoSampler,YOLOBBoxCoder中,正负样本分配在GridAssigner

输入是neck后,即fpn后的值,(8,512,19,19),(8,256,38,38),(8,128,76,76),8是bs,输出是模型预测(8,21,19,19),(8,21,38,38),(8,21,76,76),这里的21=3*7,3是anchor,7=4+1+2,4是xywh,1是边界框置信度,2是类别。

1.生成yolo中的anchor。AnchorGenerator.grid_prior

基于特征图上的0,0坐标点生成anchor,每个网格的左上角坐标都有三组anchor,映射回原图,一共有19*19*3,38*38*3,76*76*3=22743个anchor。

2.YOLOAnchorGenerator.responsible_flags

计算gt的中心所在的网格,yolo是中心点落在哪个网格,哪个网格的anchor负责预测gt。三张特征图上都计算中心点落在网格上的索引。

3.GridAssigner.assign

gt bbox和所有的anchor计算iou,gt bbox:15,4,anchor:22743,4

3.1 将最大iou小于0.5的iou索引置为0,将没有gt bbox中心位置的anchor iou强制设置为最小值为-1,

3.2.gt bbox中心落在A网格,但是最大iou对应的anchor不再A,在B,不允许出现这种情况,yolo是强制落在网格处才负责训练,用responsible_flags找索引,对于所有anchor中的每个位置,如果该位置和gt bbox的iou大于阈值,并且gt bbox中心点落在对应的anchor,iou大于阈值才会匹配,任何一个网格中心都有3个anchor,如果3个anchor的iou都大于阈值,都有可能匹配,

3.3 遍历每个gt,判断和它iou最大的anchor,大于0,保证每个gt一定有anchor匹配。

4.PseudoSampler.sample

pos_inds,neg_inds

5.YOLOBBoxCoder.encode

gt bbox的中心点和wh,anchor的中心点和wh,xywh编码,但是编码都是在stride的特征图上。其实预测的就是编码值。

6.loss

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值