[目标检测] :Pointing Linking Net思路解析

    科技2022-08-20  96

    以复现Pointing Linking Net 为契机的学习过程小结


    网络简介:

    PLNet是anchor free的预测思路,不采用anchor box, 而是使用预测具体的点的位置来确定物体框的位置。

    1. 大致思路: 如下图片: 要预测该car,理论上只需要一个中心点O点再加上任意一个角点(图片角上的点) 如论文中图片已经标注出来的C1、C2、C3、C4和O点,只需要Cx加一个O就可以确定物体位置了。为此考虑预测这些点。

    2. 具体步骤:

    首先要将图片进行网格的划分,在进行划分前可以考虑进行resize,以便用同样的方格大小继续进行接下来的训练和预测。论文采用SS的分割尺寸,即将输入图片resize后均分为SS个完全一样大小的小方格,便于接下来的参数确定,论文中采用S=14。对于每个小方格要预测B个角点和B个中心点,也就是说对于当前选中的一个小方格要预测一些参数(下面详细解释),论文中采用B=2以下我们按照论文中所说的方式进行剖析。现在图片被分割成了14*14=196个大小完全一致的方格,而对于每一个方格要预测一些参数,这些参数构成了最后该方格中是否有物体的概率(这里的有物体指的是物体的中心或者角点是否在该方格内)。这些参数包括以下: 该方格内是否有物体该方格内假设有物体,那么其真正的坐标在该小格内的相对坐标大小。这意味着将一个方格现在看成一个新的相对坐标系,向下为y正向,向右为x正向,而要预测的x和y是在该新的坐标系下的位置,取值自然就是[0,1],用于微小调整预测框。该方格内假设有物体,那么是某个物体的概率为多少。共有C个分类,论文中采用的是C=20该方格内假设有物体,那么该方格与第x行连接的概率有多大该方格内假设有物体,那么该方格与第y列连接的概率有多大。4和5当中的连接可以这样理解:假如现在预测的是角点,那么要完整预测一个物体就还需要知道一个中心点,而那个中心点一定也属于另外一个方格,那那个中心点就一定有一个所属的行和列,于是通过4和5的方式进行预测。当现在预测的是中心点时,道理相同

    3. 损失函数

    损失函数形式如下: 其中 含义比较简单,如果该方格内有物体,那么loss就取前一项,如果没物体就直接取后一项 其中 L ( k ) i j x L(k)_{ij}^{x} L(k)ijx表示第i行第j个点与第k行连接的概率,x代表行,i和j的出现则是将分割的网格分为了14*14,因此i和j的取值都是[0,13],由于各项损失均为 L 2 L_2 L2loss,因此怀疑给ground truth标注的时候得到的结果也是和经过网络后的参数一样维度的变量。

    4. 训练

    网络结构如下: 特征提取网络选择了Inception-V2网络,再经过第一个conv层后选择了走四条完全一致但相互独立的分支,这样可独立训练四份不一样的参数,最后得到四个不一样的inference, 再进行参数解析得到最终结果。

    网络最后出现的204可能是451,参数分析如下: 由于B=2, 每个方格要预测B个角点和B个中心点,因此2B=4。51则是1+2+20+14+14, 1 是是否有物体的概率,2是微小调整的x和y位置,20是分类数,14和14则是两类连接的参数。


    5. 预测 预测时通过四条分支独立预测物体,最终使用NMS取得概率最大的检测框输出


    6. 个人遇到的问题

    论文中没有详细说明各层卷积的详细参数,也没有提供源码,在分析时遇到较大的问题。空洞卷积部分的参数不明朗,若是一直做多次空洞卷积,padding需要到达16,怀疑会影响预测准确性。将ground_truth转换为target的时候考虑到训练时target应该与inference的维度一模一样,于是转换时不是很清楚如何去做,是将四个51都当做角点来标注还是2个当做角点2个当做中心点?并没有给清楚。

    总而言之,思路在当时比较奇特,但是论文比较笼统,在重现时出现较多的问题.

    Processed: 0.024, SQL: 9