YOLOv1中的grid与b-box

博客介绍了YOLOv1生成7*7的特征图,通道数为30,共49个网格,每个网格对应20个类别和2个边界框,且两个边界框只能是同一类别。作者对真实标签如何对应边界框预测器及损失训练存疑,后发现代码会选iou最大或rmse最小的边界框计算损失。

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

YOLOv1在最后生成一个7*7的feature map,channel数为30((4+1)*2+20)。即一共49个grid,每个grid对应20个类别和2个b-box(4个坐标和1个置信度);这也就意味着,这两个b-box都只能是同一个类别。

然后我就有一个疑问,那ground truth怎么对应到这两个不同的b-box predictor上,loss到底怎么训练?仔细看了论文也没有找到答案,看来只有看作者的源码才能知道这个细节问题了。

for(j = 0; j < l.n; ++j){
                    int box_index = index + locations*(l.classes + l.n) + (i*l.n + j) * l.coords;
                    box out = float_to_box(l.output + box_index);
                    out.x /= l.side;
                    out.y /= l.side;

                    if (l.sqrt){
                        out.w = out.w*out.w;
                        out.h = out.h*out.h;
                    }

                    //计算iou的值
                    float iou  = box_iou(out, truth);
                    //iou = 0;
                    //计算均方根误差(root-mean-square error)
                    float rmse = box_rmse(out, truth);
                    //选出iou最大或者均方根误差最小的那个框作为最后预测框~
                    if(best_iou > 0 || iou > 0){
                        if(iou > best_iou){
                            best_iou = iou;
                            best_index = j;
                        }
                    }else{
                        if(rmse < best_rmse){
                            best_rmse = rmse;
                            best_index = j;
                        }
                    }
                }

上面代码中:

l.n对应论文中的B(b-box predictor的数量),即是2。代码很明显,会挑出最好的一个b-box,用来计算loss,选择条件就是iou最大或者rmse最小,所以每个grid只有一个b-box会参与loss的计算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值