1 前言
CenterNet的代码还是有点难懂,不过还是要感谢各位同学分享的资料~
2 CenterNet代码的学习笔记
2.1 数据读取——COCO类
COCO类是用来进行数据读取的,读取之后获得的item有以下几个属性:
'image': img,
'hmap': hmap,
'w_h_': w_h_,
'regs': regs,
'inds': inds——
inds指的是目标中心的线式索引,其中“线式索引”指的是将单张特征图平铺为一维向量之后的索引(或者说坐标),
从inds的计算公式也可以看出:inds[k] = obj_c_int[1] * self.fmap_size['w'] + obj_c_int[0]
'ind_masks': ind_masks,
'c': center, 's': scale, 'img_id': img_id
2.2 后处理
下面在介绍后处理时我们会按照测试时的顺序进行介绍;
2.2.1 _nms——基于高斯分布特性的NMS算法
使用检测局部极大值的方法,来获得检测的峰值,从而获得得分最高的检测框;
如图所示:
2.2.2 Top-K——获取得分最高的k个值
使用Top-K方法来获取得分最高的k个值,k是一个超参数;
如图所示:
在论文中,K=100;
2.2.3 Soft-NMS——在测试阶段对boxes进行过滤
CenterNet在测试阶段时使用了Soft-NMS算法,
我觉得可能的原因是CenterNet在测试时将图片建立了多尺度输入,所以很可能会出现重复检测框的情况,
2.3.4 max_per_image——实际上用的也是Top-K进行筛选
通过设定每种图片最多的目标数量来进筛选,通过max_per_image来获取进行筛选的阈值;
如图所示: