最近一直没有继续看文献,刚刚将ssd的代码调通。实验室的席大师上次在讨论班中对yolov2和v3做了简单的介绍。个人感觉跟SSD框架在大方向上并没有过多差异,所以,准备对SSD以及yolov2+做一些个人理解的阐述。仅供大家参考。
1.SSD
SSD是北卡罗来纳大学的刘威在ECCV 2016提出的,它较于之前one-satge的yolo无论在准确度还是速度上面都有了较大的提升。在我看来,SSD的框架设计过程是faster rcnn 和yolo 两框架的结合,都将其最有优势的地方进行了完美结合。例如,fasetr中anchor box 的引入(SSD中成为default box).针对yolo中提出的基于网格的划分,ssd中也同样采用(文章当中是这么说的,但其实只是个概念问题,无论是在ssd,yolo系列,还是faster,都是对feature map 上进行逐点操作,所以并不存在网格区域的划分,即该过程并没有加速的过程)接下来,我将对两框架进行详细说明。文笔有限,语言逻辑不通顺的地方请私我!
放一张SSO tutorial 中各个框架的效果比较图:
首先比较一下ssd与faster,ssd采用faster中anchor box的辅助手段进行训练,同时去掉比较耗时的rpn阶段(faster 只所以比较耗时,是因为该pipline先通过rpn进行粗筛选,然后通筛选后的结果喂到fast中精筛,其实是有重复推断的过程,所以在预测时比较耗时)。而SSD则只采用anchor box辅助手段,为保证精度,采用多层feature map同时进行预测(最初版本的fpn??
其实在yolov2中也采用了相关思想,对feature map进行融合,如图:上图为SSD操作,下图为yolov2 FP操作:)
两框架在精度上都有所提升,对小样本能更好的检测,从而精度上超越faster。但做小目标检测的师兄说,faster在真正的小目标检测中还是较其他框架有更多的优势。
2.Yolov2
什么都不说,什么都不做。直接上图吧:
yolov2在我看来与ssd在整体框架上并没有太大差别,只是将一些小的trick进行了实验,然后达到了一个很不错的效果。
整体yolov2的框架图,出自我实验室席大师之手:
值得一提的是,yolov2的唯一创新点就是可以将不同大小的图片放进网络中进行训练,从而提高网络的泛化性能,能更好的检测出目标。而ssd以及faster都是将图片先resize成固定大小,然后再进行训练。当时针对resize的目标,我跟师兄还做过简要分析:感觉在不丢失信息的前提下,resize的目的是为了加速计算,减少显存压力。而v2中则并没有考虑这一点,所以在速度上相比之前变慢,但是在精度上得以提升。毕竟no free lunch !!!哈哈,纯碎是我个人理解。在yolov2论文的最后,作者提出了基于联合训练的yolo9000,只是作为对yolov2的改进,我并没有对其做深入了解。
针对v3,将FPN引入到框架中,从而更快、更准,取代了上文中提高精度的小trick,v3为进化版特征提取器。
以上是我对SSD以及Faster的个人理解,如有误导,请谅解!