单阶多层检测器SSD(二)难点理解更新

现在难点在于:

问题一

1.SSD最后的预测结果是怎么画到图上的,回归的时候是让prior box和gt做损失得到prior
box就是检测结果吗?如果不是从已有的anchor中得到检测结果的话,是重新得到了一个box吗?

(1)这个问题来源于深度学习笔记(七)SSD 论文阅读笔记简化

作者回复:回归目标不是 GT, 而是
GT - prior box,这么理解吧:(预测的 box + prior box) = 检测框

并没有理解作者的意思,还需要进一步学习。

参考目标检测|SSD原理与实现

其中作者提到,真实预测值其实只是边界框相对于先验框的转换值。如下图所示,从这篇文章中可以得出,先验框指的应该是prior box,预测框是一个prior box有offset的框。那么,为什么要设置prior,这个offset又是如何预测出来的?这里具体参考的应该是code\SSD_pytorch-master\layers\functions\detection.py

单阶多层检测器SSD(二)难点理解更新

(2)参考书中写明的是SSD是在一阶网络的基础上使用固定框进行区域生成,在Faster rcnn中我理解的区域生成是先生成区域,然后再在ROI中画框去回归。那么ssd的固定框就是最后目标的检测框吗?还是也是以此为范围二次画框呢?

这里纠结的点属于SSD的预测过程。也就是detection部分单阶多层检测器SSD(二)难点理解更新
在预测部分,参考目标检测|SSD原理与实现
预测过程比较简单,1.对于每个预测框,首先根据类别置信度确定其类别(置信度最大者)与置信度值,并过滤掉属于背景的预测框。然后根据置信度阈值(如thresh=0.5)过滤掉阈值较低的预测框。对于留下的预测框进行解码(decode),根据先验框(感觉这里的先验框是指的gt)得到其真实的位置参数(解码后一般还需要做clip,防止预测框位置超出图片)。解码之后,一般需要根据置信度进行降序排列,然后仅保留top-k(如400)个预测框。最后就是进行NMS算法,过滤掉那些重叠度较大的预测框。最后剩余的预测框就是检测结果了

问题二

2.反向传播loss的意义在哪里,为什么loss会在训练中降低呢?

也是上面那篇文章,作者提到了在训练过程中的 prior boxes 和 ground truth boxes 的匹配,基本思路是:让每一个 prior box
回归并且到 ground truth box,这个过程的调控我们需要损失层的帮助,他会计算真实值和预测值之间的误差,从而指导学习的走向。

目前对问题一的理解
SSD中使用anchor是一个先验,对每个anchor赋予一个类别标签和偏移值(相对于gt的),然后通过loss去更正,得到anchor预测标签和预测偏移量,最后在这些anchor中用NMS选择
文章anchor与anchor box理解写的很好,问题一的存在主要还是对anchor理解的不深刻。
在所有的目标检测算法中,检测图片时如何在图片上画框还是要仔细学习。