1. 从“撒网捕鱼”到“精准狙击”:理解SSD的锚点设计思想
很多刚接触目标检测的朋友,可能会被“锚点”、“先验框”这些术语吓到。其实,你可以把它想象成一次“撒网捕鱼”。早期的YOLO网络,就像只撒了几张大网,网眼大小固定,位置也比较随意。如果鱼(目标)的大小和网眼不匹配,或者鱼游到了网的空隙里,这张网就抓不到它。这直接导致了YOLO v1在检测小目标和密集目标时,精度不够理想,漏检和定位不准的情况时有发生。
SSD(Single Shot MultiBox Detector)网络的出现,就是为了解决这个“撒网太糙”的问题。它的核心设计思想,我总结为两点:“多尺度密集撒网”和“分层分级筛查”。这就像我们捕鱼时,不仅要用大网抓大鱼,还要准备中网、小网,甚至更密的网来抓不同大小的鱼,并且在不同的水深层次(对应图像的不同特征层)进行捕捞,确保从上到下,从大到小的目标都无所遁形。这个“网”,在SSD里就是“锚点”或“先验框”(Prior Box/Default Box)。而“不同的水深层次”,就是它的特征金字塔(Feature Pyramid)。
我刚开始复现SSD时,也曾疑惑:为什么要设计这么多锚点?一张图片生成8732个先验框,不会让计算变得极其臃肿吗?后来在实际项目中踩过坑才明白,这正是SSD作为one-stage检测器在精度和速度之间找到的绝佳平衡点。它用一次前向传播(Single Shot)就完成了所有工作,省去了two-stage方法(如Faster R-CNN)中区域提议网络(RPN)的额外开销。而这些密集的锚点,就是它保证召回率(尽可能找到所有目标)的基石。简单来说,SSD的策略是“宁可错杀一千,绝不放过一个”,先通过密集锚点覆盖所有可能性,再通过后续强大的分类和筛选机制,把错误的框剔除掉。
2. 庖丁解牛:SSD网络结构全景拆解
要理解锚点如何工作,我们必须先看清SSD这头“牛”的全貌。网上很多结构图要么太简略,要么太复杂,我这里结合自己的理解,画一个更清晰的“骨架图”给大家看。SSD的整体流程可以概括为:一个基础网络提取特征,多个附加层构建金字塔,然后在金字塔的每一层“撒网”(生成锚点),最后对这些网里的“收获”进行分类和位置微调。
2.1 基石:VGG16与特征金字塔的构建
SSD通常以VGG16作为主干网络(Backbone),但做了关键改动。它砍掉了VGG16最后的全连接层,将其转换为卷积层。更重要的是,它不仅仅使用最后一层高级语义特征,而是创造性地利用了网络中间层的多个特征图。具体来说,SSD主要使用了六个特征层来进行检测:
- Conv4_3:来自VGG16的较浅层。这一层特征图尺寸较大(例如38x38),感受野小,包含丰富的细节信息(如纹理、边缘),非常适合检测图像中的小目标。
- Conv7 (FC7):由VGG16的全连接层转换而来,是更深层的特征。
- Conv8_2, Conv9_2, Conv10_2, Conv11_2:这些是在Conv7之后额外添加的卷积层,一层比一层深,特征图尺寸依次减小(例如19x19, 10x10, 5x5, 3x3, 1x1),感受野依次增大,语义信息越来越抽象,适合检测中大型目标。
这六层特征图,从大到小,从细节到抽象,共同构成了一个特征金字塔。这就好比我们用不同倍率的显微镜观察样本:低倍镜(深层特征)看整体结构和大的细胞器;高倍镜(浅层特征)看细微的纹理和小的颗粒。在目



被折叠的 条评论
为什么被折叠?



