paper:https://arxiv.org/pdf/1904.07850.pdf
官方代码:https://github.com/xingyizhou/CenterNet
我的代码:https://github.com/panchengl/centernet_prune
首先提一下我的代码复现(torch),官方代码支持包括2d目标检测、3d检测、姿态估计任务,我移除了其他的任务,并简单的重构了代码,使得代码更加易读,然后基于我改后的代码完成了模型压缩(剪枝方案),并添加使用了VOC的测试方法(ap50),然后在自己的数据集(复杂场景上)上完成了测试,模型压缩力度还是比较大,而且精度损失很小,有兴趣的同学可以基于我的代码进行二次开发。
总体印象:
我认为结构最优雅的anchor-free算法,没有太多的tricks,效果却很惊艳,可能也是由于模型的原理特点,在误检方面控制得很好,速度跑起来飞快,而且在结构上扩展性好,各种backbone、deformconv、其实都可以随便加,主要精髓就在于特征提取+points回归,并且可以应用到其他任务,相当优秀了,就是落地有点麻烦(至芯片端),后处理不太好做,只能将后处理重写,将其封装在onnx里面,据我所知,有芯片厂商是已经支持该算法的了。
文章解决的问题:
1、cornernet、extremenet检测关键点,但是需要一个grouping的阶段,降低速度,且会导致一个匹配错误等类型的误检
作者依次提出了直接检测每个目标的中心点来处理,避免grouping,端到端,速度快,不需要nms(但是作者源码是使用了nms的(可选),多尺度检测的时候必须要使用)。
文章思路(侧重于2d检测的分析):
构建模型时,使用backbone来获取目标的热力图,找到目标的中心点(关键点),热力图峰值点即为关键点,并根据中心点,回归出中心点到边界的距离(宽高信息),连fpn的多级预测都没有使用,2d回归的是中心点到两个边界的距离,3dbbox检测回归bbox尺寸和深度信息、朝向,人体姿态估计回归中心点到关节点的偏移量。
方法创新点:
1、关键点-中心点可以看成是一个形状未知的anchor,但没有尺寸框,没有手动设置的阈值做分类,如下图所示。
2、每个目标仅有一个正的中心点,不会用到nms,直接提取关键点特征图的局部峰值点,且训练样本可以认为positive examples多。
3、使用更大的分辨率输出特征图,但总体而言只下采样了4倍,无需用到多级预测关键点
文章思路-Preliminary-如何预测关键点:
令为输入图像,