虽然在之前学习过RepPoints这个网络,但当时理解较为浅显,现在再看论文和一些博客解释,感觉又有了新的收获。
RepPoints是一种anchor-free网络,说的是使用具有一组代表性的点来表示目标,本质上与可变形卷积DCN是一样的,不同的是,这里的RepPoints会产生伪框(pseudo box)与GT比较计算损失来回归点的位置,进一步优化具有代表性的点落在目标上。而DCN的论文里,它是作为一种卷积方式,结果是得到特征图,在特征图的基础上铺设anchor来找出目标,这是目前理解的两者的区别。
至于两者的联系,为什么说本质上是一样的,因为这组具有代表性的点RepPoints大小是3x3,与可变形卷积核的大小是一样的,都是在特征图上加上对应的偏移量后进行滑动,所以说两者的工作方式是一样的,只是形容的不一样,应用到具体的网络看起来模糊了而已。
下面是结合论文网络结构图加上的个人理解:
两个子网络,上面是回归分支,下面是分类分支,前端都是通过普通的特征提取网络获取特征图。在回归分支中,首先是阶段一,通过卷积产生偏移量,在特征图上的每个点上产生18个偏移量offset1(x,y各9个),将每个位置加上偏移量后得到每个位置对应的RepPints 1,得到伪框(pseudo box)与GT回归;阶段二,加上offset1后卷积得到新的特征图,再进一步产生偏移量offset 2,在RepPoints的基础上进行微调,得到更准确的位置RepPoints 2.
关于分类分支,在回归分支的阶段一后直接进行分类,加上偏移量offset 1 的特征图对每个位置的区域与GT对比大于一定阈值为目标,可变形卷积后可以看到卷积层 1x1conv, 81 这里的81指的是coco数据集的类别数,所以这层负责分类。
具体细节建议结合论文看比较好理解。
后续体会(11.06):
reppoints网络结构中使用的dcn有多个位置,首先是在特征提取模块backbone中的下采样环节使用dcn提取特征,最重要的是检测头head模块,这里的dcn不仅仅是提取特征,还需要产生偏移量用以预测位置,并且根据偏移量(位置定位区域)来进行分类。
检测头模块其实也是很简单的,最初会觉得它复杂难懂是因为开始的时候为了解释它,人们赋予了它太多概念和方法,导致听起来那么模糊和高深莫测,而本质就是通过卷积层在特征图上卷积生成表示位置和分类概率的数据。不同的检测器生成这些检测数据的方式存在差别,对检测头的解释就变得特别丰富,因为这里需要判断学习的正负样本如何分配,需要根据预测结果产生损失进行反向传播,怎样处理特征图以提高分类概率和位置精确度等。现在看起来就是在经过几个卷积层之后对特征图使用一些tricks来得到数据。
下面看一些检测头结构: