implus / GFocalV2

Generalized Focal Loss V2: Learning Reliable Localization Quality Estimation for Dense Object Detection, CVPR2021

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

获得bbox分布的可视化图的方法

jackhu-bme opened this issue · comments

李老师,您好!
想请问一下您给定一张图片和训练好的权重怎么样获得边框分布的可视化图呀(也就是generalized focal loss第一个版本论文里面补充材料里面的图)(好像没有在这个repository中看到相关的脚本),我想在训练的时候得到每一张图片中bbox的概率分布,然后将其可视化并且用于定位框质量估计。
我阅读了源码,但是限于自己水平有限,有的地方没有看明白,不好意思打扰您了,希望能得到您的指导。
@implus
在gfocal loss的第一个版本的论文之中,在最后面的补充材料可视化上我看到很多图片的box对应的分布直方图,我觉得非常有趣而且可以在我的课题中起到很大的作用。在我的理解之中,这张图的横坐标从0-16对应着论文中的
we convert the integral over the continuous domain into a discrete representation, via discretizing the range [y0, yn] into a set
{y0, y1, ..., yi, yi+1, ..., yn−1, yn} with even intervals ∆ (we use ∆ = 1 for simplicity). Consequently, given the discrete distribution property P ni=0 P(yi) = 1, the estimated regression value yˆcan be presented as: (离散的求和公式)
我理解的n=16(图上画的),然后通过将原来的anchor附近的区间划分为16个小区间,统计每一个区间上面预测出来的概率,最后得到归一化的概率,最从而得出分布。最后利用这样的分布,通过求和公式,得到回归结果。
没看懂的是:1、y0,yn是怎样设置的?因为retinanet的head预测的是相对于先验anchor的xyxy偏移量,那么这里是否是偏移0-16个像素的含义?∆ = 1 对应的是原图上面的一个像素吗?y0到yn和实际图片上的坐标关系是怎么对应起来的?
2、我阅读了GFocalHead这个类的代码,我觉得head的向前传播核心在于forward_single(self, x, scale)函数:
我认为在生成分布的时候核心代码是:
bbox_pred = scale(self.gfl_reg(reg_feat)).float() N, C, H, W = bbox_pred.size() prob = F.softmax(bbox_pred.reshape(N, 4, self.reg_max+1, H, W), dim=2) prob_topk, _ = prob.topk(self.reg_topk, dim=2)
对于reg_feat输入box_net的特诊图,先进行了调整通道数目、通道信息融合的卷积,卷成通道4*(self.reg_max+1)(这里就是4*(16+1)),也就是在每一张图片的特征图每一个点上面产生4个方向的16+1个通道的预测概率。
我非常迷惑的点就是,这17个编号从0到16的通道是怎么样能做到去预测附近的16个定位小区间(17个定位点)的概率的,这样的通道编号和区间位置的对应关系是怎么样的?是说0号通道对应偏移0个点还是?
实在不好意思打扰您了,感激不尽!
祝李老师国庆节快乐!!!

我把问题精简一下,就是一张图片进来,我拿到了经过softmax之后的prob的tensor,我该怎么样得到估计出来的bbox的在原图上面的位置(坐标)的概率分布?为什么?
嗯,就是这样,麻烦李老师了。

现在我读了后面的代码,基本都弄懂了,之后整理整理写个博客记录一下。如果有问题再来问,打扰李老师了。先把issue关了